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 ...