亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

php實現二叉樹的方法是什么

發布時間:2023-04-10 15:06:36 來源:億速云 閱讀:77 作者:iii 欄目:編程語言

這篇“php實現二叉樹的方法是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“php實現二叉樹的方法是什么”文章吧。

什么是二叉樹

二叉樹是由若干個節點組成的,每個節點最多有兩個子節點。它有三個屬性:

  • 節點值

  • 左子樹指針

  • 右子樹指針

二叉樹分為以下幾類:

  • 滿二叉樹:除了葉節點,其他節點都有兩個子節點

  • 完全二叉樹:如果二叉樹的深度為d,除了第d層,其他層都是滿的,而且在第d層上,所有的葉子節點都在左邊連續的位置

  • 二叉搜索樹:左子樹所有節點小于根節點值,右子樹所有節點值大于根節點值

實現二叉樹

我們可以用類來定義二叉樹結構。每個節點都是一個對象,包含以下屬性:

  • value:節點值

  • left:左子樹指針

  • right:右子樹指針

創建一個類來表示節點。

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

接下來,我們需要創建一個類來表示二叉樹。

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

接下來,我們將定義以下二叉樹的方法:

  • insert(value):將值插入二叉樹

  • search(value):查找二叉樹中的值

  • delete(value):從二叉樹中刪除值

插入節點

插入節點方法將插入新節點到正確的位置。如果樹為空,新節點是根節點。否則,我們開始從根節點比較當前節點的值。

  • 如果新節點的值小于當前節點的值,則我們將新節點插入左子樹。

  • 如果新節點的值大于當前節點的值,則我們將新節點插入右子樹。

  • 如果新節點的值等于當前節點的值,則節點已經存在,不需要插入。

這是插入方法的代碼:

function insert($value) {
    $newNode = new Node($value);
    if ($this -> root == null) {
        $this -> root = $newNode;
    } else {
        $current = $this -> root;
        while (true) {
            if ($value < $current -> value) {
                if ($current -> left == null) {
                    $current -> left = $newNode;
                    return;
                } else {
                    $current = $current -> left;
                }
            } else if ($value > $current -> value) {
                if ($current -> right == null) {
                    $current -> right = $newNode;
                    return;
                } else {
                    $current = $current -> right;
                }
            } else {
                return;
            }
        }
    }
}

查找節點

查找節點方法是一個簡單的遞歸方法。從根節點開始比較節點的值。如果值相等,返回當前節點。否則,如果節點的值小于要查找的值,則繼續查找左子樹。如果值大于要查找的值,則繼續查找右子樹。

這是查找方法的代碼:

function search($value) {
    $current = $this -> root;
    while ($current != null) {
        if ($value == $current -> value) {
            return $current;
        } else if ($value < $current -> value) {
            $current = $current -> left;
        } else {
            $current = $current -> right;
        }
    }
    return null;
}

刪除節點

刪除節點方法是整個實現中最復雜的方法之一。如何刪除節點取決于節點的子節點數。可以有以下幾種情況:

  • 節點是葉子節點,沒有子節點。直接刪除節點。

  • 節點只有一個子節點。將子節點替換為該節點。

  • 節點有兩個子節點。找到節點右子樹中的最小值,將最小值替換為該節點,并從右子樹中刪除最小值。

這是刪除方法的代碼:

function delete($value) {
    $current = $this -> root;
    $parent = null;
    while ($current != null) {
        if ($value == $current -> value) {
            if ($current -> left == null && $current -> right == null) {
                if ($parent == null) {
                    $this -> root = null;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = null;
                    } else {
                        $parent -> right = null;
                    }
                }
            } else if ($current -> left == null) {
                if ($parent == null) {
                    $this -> root = $current -> right;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = $current -> right;
                    } else {
                        $parent -> right = $current -> right;
                    }
                }
            } else if ($current -> right == null) {
                if ($parent == null) {
                    $this -> root = $current -> left;
                } else {
                    if ($parent -> left == $current) {
                        $parent -> left = $current -> left;
                    } else {
                        $parent -> right = $current -> left;
                    }
                }
            } else {
                $replacementNode = $current -> right;
                while ($replacementNode -> left != null) {
                    $replacementNode = $replacementNode -> left;
                }
                $removeValue = $replacementNode -> value;
                $this -> delete($replacementNode -> value);
                $current -> value = $removeValue;
            }
            return;
        } else if ($value < $current -> value) {
            $parent = $current;
            $current = $current -> left;
        } else {
            $parent = $current;
            $current = $current -> right;
        }
    }
}

以上就是關于“php實現二叉樹的方法是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

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

php
AI

普兰店市| 湘潭市| 天祝| 正镶白旗| 平原县| 舞阳县| 包头市| 上林县| 新巴尔虎右旗| 开原市| 丁青县| 哈尔滨市| 马关县| 栾城县| 微山县| 普格县| 大洼县| 辽阳县| 武邑县| 玉环县| 桦川县| 虹口区| 昭苏县| 锦屏县| 龙山县| 齐河县| 娄底市| 临城县| 化隆| 子洲县| 平塘县| 吉木乃县| 河池市| 陵川县| 炎陵县| 清远市| 铁岭市| 泸溪县| 咸宁市| 金秀| 博兴县|