您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用PHP怎么對二叉樹進行排序,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
排序二叉樹: 左孩子節點的值小于父節點的值,右孩子節點的值大于父節點的值.
幾個概念:
根節點
葉子節點
左子樹
右子樹
中序遍歷
前序遍歷
后序遍歷
二叉樹查找
中序遍歷:
先遍歷左子樹,在遍歷本節點,在遍歷右節點.遍歷之后的結果就是排序好之后的結果
// created by 曲朋維 // 排序二叉樹 // 完成以下任務. // 1. 將節點插入到對應位置 // 2. 使用中序遍歷遍歷這個二叉樹 // 3. 找到這個二叉樹的極值 // 4. 搜索一個特定的值 class Node{ public $key,$left,$right; public function __construct($key) { $this->key = $key; } } class BinaryTree{ public $root; public $sortArr = []; // 插入節點 public function insertNode($node,$newNode){ if ($node->key < $newNode->key){ // 如果父節點小于子節點,插到右邊 if (empty($node->right)){ $node->right = $newNode; }else{ $this->insertNode($node->right,$newNode); } }elseif ($node->key > $newNode->key){ // 如果父節點大于子節點,插到左邊 if (empty($node->left)){ $node->left = $newNode; }else{ $this->insertNode($node->left,$newNode); } } } public function insert($key){ $newNode = new Node($key); if (empty($this->root)){ $this->root = $newNode; }else{ $this->insertNode($this->root,$newNode); } } // 中序遍歷 public function midSort(){ $this->midSortNode($this->root); } public function midSortNode($node){ if (!empty($node)){ $this->midSortNode($node->left); array_push($this->sortArr,$node->key); $this->midSortNode($node->right); } } // 尋找極值 public function findMin(){ //不斷的找它的左子樹,直到這個左子樹的節點為葉子節點. if (!empty($this->root)){ $this->findMinNode($this->root); } } public function findMinNode(Node $node){ if (!empty($node->left)){ $this->findMinNode($node->left); }else{ echo '這個二叉樹的最小值為:'.$node->key; } } public function findMax(){ if (!empty($this->root)){ $this->findMaxNode($this->root); } } public function findMaxNode(Node $node){ if (!empty($node->right)){ $this->findMaxNode($node->right); }else{ echo '這個二叉樹的最大值為:'.$node->key; } } // 查找特定的值 public function find($val = ''){ if (!empty($val)){ $this->findNode($this->root,$val); } } public function findNode(Node $node,$val){ if ($node->key == $val){ echo '找到'.$val.'了'; }else if ($node->key > $val){ // 如果 父節點的值 大于要查找的值,那么查找它的左子樹 if (!empty($node->left)){ $this->findNode($node->left,$val); }else{ echo '沒有這個東西!'; } }else if ($node->key < $val){ if (!empty($node->right)){ $this->findNode($node->right,$val); }else{ echo '沒有這個東西!'; } } } } $tree = new BinaryTree(); // 節點插入 $nodes = array(8,3,10,1,6,14,4,7,13); foreach ($nodes as $value){ $tree->insert($value); } // 中序遍歷 //$tree->midSort(); //print_r($tree->sortArr); // 尋找極值 //$tree->findMin(); //$tree->findMax(); // 查找特定的值 $tree->find(7); echo "<br/>"; $tree->find(11);
運行結果:
找到7了
沒有這個東西!
關于使用PHP怎么對二叉樹進行排序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。