演算法導論 c 實現二叉搜尋樹

2021-08-13 18:02:00 字數 2557 閱讀 8718

/*求二叉搜尋樹最小結點*/

treenode_p *tree_minimum(treenode_p * tree)

tree_minimum(tree->left);

}/*求二叉搜尋樹最大結點*/

/*求二叉搜尋樹後繼結點*/

treenode_p *tree_successor(treenode_p * tree)

treenode_p *y = tree->parent;

while(y != null && tree==y->right)

return y;

}

若乙個節點有左子樹,那麼該節點的前驅節點是其左子樹中val值最大的節點(也就是左子樹中所謂的rightmostnode)

若乙個節點沒有左子樹,那麼判斷該節點和其父節點的關係

2.1 若該節點是其父節點的右邊孩子,那麼該節點的前驅結點即為其父節點。

2.2 若該節點是其父節點的左邊孩子,那麼需要沿著其父親節點一直向樹的頂端尋找,直到找到乙個節點p,p節點是其父節點q的右邊孩子,那麼q就是該節點的後繼節點

/*求二叉搜尋樹後繼結點*/

必須分三種情況進行討論。

//v子樹替換u子樹,tree是根節點

void transplant(treenode_p * tree, treenode_p * u, treenode_p *v)

else

if (u->parent->left ==u) //更新父節點的孩子

else

if (v != null)

}/*二叉搜尋樹刪除*/

void tree_delete(treenode_p * tree, treenode_p * node)

else

if(node->right==null) //右子樹空

else

transplant(tree, node, y);//後繼是待刪除節點的子樹,直接替換刪除節點,並把後繼左子樹替換為刪除節點左子樹

y->left = node->left; //拼接左孩子

y->left->parent =y;}}

測試:

int main()

演算法導論 二叉搜尋樹

搜尋樹資料結構支援許多動態集合操作,包括search minimum maximum predecessor successor insert和delete等。因此,我們使用一棵搜尋樹既可以作為乙個字典又可以作為乙個優先佇列。二叉搜尋樹上的基本操作所花費的時間與這棵樹的高度成正比。對於乙個有n個結點...

演算法導論二叉搜尋樹

兩天寫完的,沒有認認真真的測試,可能有些bug,自己測試的資料能過,但是我的初始化有些問題,不知道該怎麼表示 二叉搜尋樹 include include using namespace std struct node void inorder search node root1 node tree ...

《演算法導論》筆記 二叉搜尋樹

演算法 資料結構 二叉搜尋樹 binary search tree 是經過一定地組織形成的有特定結構特徵的二叉樹,支援各種動態集合 dynamic set 操作 如insert delete maximum minimum等等 這些操作的時間複雜度與樹的高度成正比。一棵有n個節點的完全二叉樹 com...