二叉排序樹的性質:
左子樹(如果存在)上所有節點的關鍵字都小於根節點的關鍵字。
右子樹(如果存在)上所有節點的關鍵字都大於根節點的關鍵字。
左子樹和右子樹也是二叉排序樹。
**。。
; 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 ...