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

溫馨提示×

php二叉樹如何刪除節點

PHP
小樊
82
2024-10-17 19:37:06
欄目: 編程語言

在 PHP 中,要刪除二叉樹中的節點,需要遵循以下步驟:

  1. 查找要刪除的節點
  2. 如果節點有兩個子節點,找到其后繼節點(右子樹中的最小節點),用它來替換要刪除的節點,然后刪除后繼節點。
  3. 如果節點只有一個子節點或沒有子節點,用其子節點替換要刪除的節點。
  4. 如果找不到要刪除的節點,不做任何操作。

以下是一個簡單的 PHP 類,表示二叉樹及其節點,以及刪除節點的函數:

class TreeNode {
    public $value;
    public $left;
    public $right;

    public function __construct($value) {
        $this->value = $value;
        $this->left = null;
        $this->right = null;
    }
}

class BinaryTree {
    public $root;

    public function __construct() {
        $this->root = null;
    }

    public function deleteNode($value) {
        $this->root = $this->deleteNodeRecursive($this->root, $value);
    }

    private function deleteNodeRecursive($node, $value) {
        if ($node === null) {
            return null;
        }

        if ($value < $node->value) {
            $node->left = $this->deleteNodeRecursive($node->left, $value);
        } elseif ($value > $node->value) {
            $node->right = $this->deleteNodeRecursive($node->right, $value);
        } else {
            if ($node->left === null) {
                return $node->right;
            } elseif ($node->right === null) {
                return $node->left;
            }

            $node->value = $this->findMin($node->right)->value;
            $node->right = $this->deleteNodeRecursive($node->right, $node->value);
        }

        return $node;
    }

    private function findMin($node) {
        while ($node->left !== null) {
            $node = $node->left;
        }
        return $node;
    }
}

使用這個類,你可以創建一個二叉樹并刪除指定值的節點:

$tree = new BinaryTree();
$tree->root = new TreeNode(5);
$tree->root->left = new TreeNode(3);
$tree->root->right = new TreeNode(7);
$tree->root->left->left = new TreeNode(2);
$tree->root->left->right = new TreeNode(4);
$tree->root->right->left = new TreeNode(6);
$tree->root->right->right = new TreeNode(8);

$tree->deleteNode(3);

這個例子將刪除值為 3 的節點,然后樹將變為:

    5
   / \
  2   7
     / \
    6   8

0
汶川县| 许昌市| 车险| 陈巴尔虎旗| 衡东县| 贞丰县| 金昌市| 友谊县| 永定县| 尚义县| 潞城市| 东丰县| 汤原县| 岫岩| 英德市| 杭锦旗| 长寿区| 惠安县| 桓仁| 河北区| 淮阳县| 祥云县| 普洱| 铁力市| 锡林郭勒盟| 南岸区| 自治县| 鹿泉市| 历史| 贵德县| 泽库县| 峨眉山市| 江孜县| 黄石市| 黎川县| 太原市| 历史| 永顺县| 明光市| 侯马市| 遵义县|