PHP實現 二叉查詢樹

2021-09-19 11:42:15 字數 1521 閱讀 5950

<?php

/** * created by phpstorm.

* user: baimayou

* date: 19-3-20

* time: 下午6.00

* 二叉查詢樹

* 二叉查詢樹要求,在樹中的任意乙個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹節點的值都大於這個節點的值

*///定義二叉樹的節點

class node

}//二叉查詢樹的新增

function buildsearchtree($tree,$value)

$newnode = new node($value);

while($tree != null)

$tree = $tree->left;

}else

$tree = $tree->right;}}

}//二叉查詢樹的刪除

/** * 第一種情況是,如果要刪除的節點沒有子節點,我們只需要直接將父節點中,指向要刪除節點的指標置為 null。

* 第二種情況是,如果要刪除的節點只有乙個子節點(只有左子節點或者右子節點),我們只需要更新父節點中,指向要刪除節點的指標,

* 讓它指向要刪除節點的子節點就可以了

* 第三種情況是,如果要刪除的節點有兩個子節點,這就比較複雜了。

* 我們需要找到這個節點的右子樹中的最小節點,把它替換到要刪除的節點上。然後再刪除掉這個最小節點,

* 因為最小節點肯定沒有左子節點(如果有左子結點,那就不是最小節點了)

* **/

//找到該節點並刪除

function deletebst(&$tree,$value)

if($tree->data == $value)elseif ($tree->data < $value)else

}//調整刪除後樹的形態

function delete(&$bitree) else if ($bitree->right === null) else

$bitree->data = $delnode->data;

// if ($bitree == $parnode) else

}}function preorder($tree)

}$a = new node('3');

buildsearchtree($a,'6');

buildsearchtree($a,'2');

buildsearchtree($a,'1');

buildsearchtree($a,'5');

buildsearchtree($a,'4');

buildsearchtree($a,'7');

buildsearchtree($a,'8');

buildsearchtree($a,'9');

preorder($a);

deletebst($a,8);

echo "

";preorder($a);

二叉查詢樹,實現

public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...

二叉查詢樹的實現

因為在關聯容器裡面主要的內部結構是rb tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉 首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來...

二叉查詢樹的實現

初學者實現了二叉查詢樹的實現 實現的功能包括 建構函式 西溝函式 判空函式 遞迴搜素 非遞迴搜尋 刪除元素 前序遍歷 中序遍歷 後續遍歷 層遍歷 沒有實現 直接上 吧,請大牛指導 標頭檔案 bst.h includeusing namespace std ifndef bst define bst ...