二叉排序樹是以關鍵碼爲結點的二叉樹,並且具有以下性質
1、如果任一結點的左子樹非空,則左子樹中的所有結點的關鍵碼都小於根結點的關鍵碼。
2、如果任一結點的右子樹非空,則右子樹中的所有結點的關鍵碼都大於根結點的關鍵碼。
想要實現二叉排序樹的增刪改查,首先我們想到的就是二叉排序樹的構造,下面讓我們一起構造一棵二叉排序樹吧!
下面是具體的思路過程以及代碼的實現:
給定了一個數據集合{5, 1, 8, 3, 4, 2, 6, 7, 9, 0},根據二叉排序樹的定義可知,依次遍歷所給的數據集合,得到的數據集合中的數據與二叉排序樹的各層節點比較,如果大於當時的節點,則找到該節點的左子樹,如果小於當時的節點,則找到該節點的左子樹,如果當時的左結點或右結點不存在,則新生成一個結點,並把值賦給該結點。
代碼實現如下:
public static void main(String[] args){
int array[] = {5,1,8,3,4,2,6,7,9,0};
Tree tree = new Tree();
for(int i = 0; i < array.length; ++i){
insert(tree, array[i]);
}
}
public static void insert(Tree tree, int value) {
// 這裏比較-1是因爲定義的Tree實體類中構造函數初始化了value值
if (-1 == tree.getValue()) {
tree.setValue(value);
} else {
if (tree.getValue() > value) {
if (null == tree.getLeftNode()) {
tree.setLeftNode(new Tree());
tree.getLeftNode().setValue(value);
} else {
insert(tree.getLeftNode(), value);
}
} else {
if (null == tree.getRightNode()) {
tree.setRightNode(new Tree());
tree.getRightNode().setValue(value);
} else {
insert(tree.getRightNode(), value);
}
}
}
}