91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用PHP怎么對二叉樹進行排序

發布時間:2021-04-07 17:48:30 來源:億速云 閱讀:123 作者:Leah 欄目:開發技術

這篇文章給大家介紹使用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怎么對二叉樹進行排序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

海盐县| 凤山县| 呼图壁县| 墨脱县| 盈江县| 孝昌县| 公安县| 政和县| 朔州市| 红原县| 芜湖市| 巴青县| 和顺县| 铜陵市| 刚察县| 鸡东县| 清新县| 新乐市| 翁牛特旗| 仙桃市| 青神县| 右玉县| 苏尼特左旗| 汨罗市| 赫章县| 益阳市| 平潭县| 漠河县| 富裕县| 汤原县| 嘉定区| 湘西| 象州县| 邓州市| 调兵山市| 晴隆县| 蚌埠市| 黄龙县| 清丰县| 开阳县| 托克托县|