二叉排序樹

2021-08-26 18:15:58 字數 1656 閱讀 4027

二叉排序樹的性質:

左子樹(如果存在)上所有節點的關鍵字都小於根節點的關鍵字。

右子樹(如果存在)上所有節點的關鍵字都大於根節點的關鍵字。

左子樹和右子樹也是二叉排序樹。

**。。

; bstree btree=new bstree(array);

btree.preorder();

system.out.println("");

system.out.println(btree.find(23));

btree.delete(39);

btree.preorder();

system.out.println("");

system.out.println(btree.find(8)); }

static class bstree

} node root;

public bstree(int array)

} /***

* 前序遍歷

*/void preorder()

void preorder(node p)

system.out.print(p.data+" ");

preorder(p.leftchild);

preorder(p.rightchild);

} node find(int k,node p)

if(kp.data) else

} node find(int k)

void insert(int k,node p)

if(kp.data) else

}//若存在,啥都不幹

} /***

* 插入乙個節點到二叉排序樹中

* @param k

* @param p

* @return 新的根節點

*/node insert2(int k,node p)

if(kp.data)

//若存在,啥都不幹

return p;

} void insert(int k)

/***

* 查詢最小的節點

* @param p 子樹的根節點

*/node min(node p)

return temp;

} /***

* 刪除以p為根節點的最小節點

* @param p

* @return 返回新二叉查詢樹的根節點

*/node deletemin(node p)

p.leftchild=deletemin(p.leftchild);

return p;

} /***

* 刪除值為k的結點

* @param k

* @param p

* @return 返回新二叉樹的根節點

*/node delete(int k,node p)

if(kp.data) else else if(p.rightchild==null) else

}} void delete(int k) }}

二叉排序樹的查詢效能和二叉樹的建立有關,如果建立的是完全二叉樹,其平均查詢效能最佳為log2n。當二叉排序樹退化成單支樹時,效能最差為(n+1)/2,與順序表的平均查詢長度相同。

參考:

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為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 ...