資料結構之二叉排序樹

2021-09-24 16:23:31 字數 3205 閱讀 6500

二叉排序樹:bst: (binary sort(search) tree), 對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。

特別說明:如果有相同的值,可以將該節點放在左子節點或右子節點

比如針對前面的資料 (7, 3, 10, 12, 5, 1, 9) ,對應的二叉排序樹為:

**實現:

package cn.smallmartial.binarysorttree;

/** * @author smallmartial

* @date 2019/6/21

* @email [email protected]

*/public class binarysorttreedemo ;

binarysorttree binarysorttree = new binarysorttree();

for (int i = 0; i < arr.length; i++)

system.out.println("中序遍歷二叉樹");

binarysorttree.infixorder();

}}//建立二叉排序樹

class binarysorttreeelse

}//中序遍歷

public void infixorder()else

}}//建立node結點

class node

@override

public string tostring() ';

}//新增節點方法

public void add(node node)

//判斷傳入結點的值,和當前子樹的根節點的關係

if (node.value < this.value)else

}else else }}

//中序遍歷

public void infixorder()

system.out.println(this);

if (this.right !=null)}}

二叉排序樹的刪除情況比較複雜,有下面三種情況需要考慮

1)刪除葉子節點 (比如:2, 5, 9, 12)

2)刪除只有一顆子樹的節點 (比如:1)

3)刪除有兩顆子樹的節點. (比如:7, 3,10 )

package cn.smallmartial.binarysorttree;

/** * @author smallmartial

* @date 2019/6/21

* @email [email protected]

*/public class binarysorttreedemo ;

binarysorttree binarysorttree = new binarysorttree();

for (int i = 0; i < arr.length; i++)

system.out.println("中序遍歷二叉樹");

binarysorttree.infixorder();

// binarysorttree.delnode(2);

// binarysorttree.delnode(1);

binarysorttree.delnode(7);

system.out.println("刪除鍵節點後");

binarysorttree.infixorder();

}}//建立二叉排序樹

class binarysorttreeelse

}//查詢父節點

public node searchparent(int value)else

}/**

** @param node 傳入節點 作為二叉排序樹的根節點

* @return

*/public int delrighttreemin(node node)

//刪除最小節點

delnode(target.value);

return target.value;

}//刪除節點

public void delnode(int value)else

if (root.left == null && root.right == null)

//去找到targetnode的父節點

node parent = searchparent(value);

if (targetnode.left == null && targetnode.right == null)else if (parent.right != null && parent.right.value == value)

}else if (targetnode.left!= null && targetnode.right !=null)else else

}else else }}

}}//新增節點的方法

public void add(node node)else

}//中序遍歷

public void infixorder()else

}}//建立node結點

class node

/***查詢刪除的節點

* @param value

* @return

*///查詢刪除節點

public node search(int value)else if(value = this.value && this.right != null)else }}

@override

public string tostring() ';

}//新增節點方法

public void add(node node)

//判斷傳入結點的值,和當前子樹的根節點的關係

if (node.value < this.value)else

}else else }}

//中序遍歷

public void infixorder()

system.out.println(this);

if (this.right !=null)}}

資料結構之二叉排序樹

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點。以下只建立並先序列印出二叉排序樹 include include...

資料結構之二叉排序樹

別名 二叉搜素樹,二叉查詢樹 線性結構的缺點 順序儲存 不排序 查詢困難,只能通過線性查詢乙個乙個找 排序 刪除和插入操作困難 鏈式結構 無論排序還是不排序,查詢都十分麻煩 注 二叉排序樹 bst 可以解決上述的問題 對於乙個二叉樹中的任意乙個非葉子節點,要求左子節點比當前節點小,右子節點比當前節點...

資料結構之二叉排序樹

1.什麼是二叉排序樹?二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。它或者是一棵空樹 或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它...