二叉排序樹

2021-08-15 18:23:25 字數 2106 閱讀 1184

1、就是若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值;

2、若它的右子樹不空,則右子樹上所有節點的值均大於其根節點的值。

3、換句話說就是:任何節點的鍵值一定大於其左子樹中的每乙個節點的鍵值,並小於其右子樹中的每乙個節點的鍵值。

要在二叉樹中找出查詢最大最小元素是極簡單的事情,從根節點一直往左走,直到無路可走就可得到最小值;從根節點一直往右走,直到無路可走,就可以得到最大值。

插入新元素時,可以從根節點開始,遇鍵值較大者就向左,遇鍵值較小者就向右,一直到末端,就是插入點。

int insertnode(binode*

&tree,int k)

else

if(k >= tree->key)

else

return insertnode(tree->left,k);

}

對於二叉排序樹中的節點a,對它的刪除分為兩種情況:

1、如果a只有乙個子節點,就直接將a的子節點連至a的父節點上,並將a刪除;

2、如果a有兩個子節點,我們就以右子樹內的最小節點取代a

}完整**:

#include 

#include

using

namespace

std;

typedef

struct binode

};int insertnode(binode* &tree,int k)

else

if(k >= tree->key)

else

return insertnode(tree->left,k);

}binode* build(int a,int len)

return tree;

}void visit(binode* x)

void preorder(binode* t)

}void searchminnode(binode* t)

if(t->left == nullptr)

visit(t);

else

searchminnode(t->left);

}void searchmaxnode(binode* t)

void deletenode(binode* &t,int k)

else

parent->left = s->right;

s->left = p->left;

s->right = p->right;

}t = s;

}delete p;

}else

if(t->key > k)

deletenode(t->left,k);

else

deletenode(t->right,k);}/*

50/ \

16 56

/ /

8 52

*/int main()

; int len = 5;

binode* tree = nullptr;

tree = build(a,len);

preorder(tree);

cout

<16);

cout

0;}

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...

二叉排序樹

include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...