二叉排序樹: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 若右子樹不空,則右子樹上所有結點的值均大於或等於它...