二叉搜索树概念我就不在这里描述了,本文主要讲的是创建。
为了方便我们比较方便快速的创建二叉搜索树,我们用的入参用数组创建。
例如arr=[1,2,3,5,6,7,8]
则生成二叉搜索树如下图所示
BST节点定义类
public class BinarySearchTreeNode {
public int value;
public BinarySearchTreeNode left;
public BinarySearchTreeNode right;
public BinarySearchTreeNode() {}
public BinarySearchTreeNode(BinarySearchTreeNode left, BinarySearchTreeNode right){
this.left = left;
this.right = right;
}
}
创建BST
private BinarySearchTreeNode createNode(int[] arr, int begin, int end){
if(null == arr || begin > end){
return null;
}
int mid = (end + begin) / 2;
BinarySearchTreeNode node = new BinarySearchTreeNode();
node.value = arr[mid];
node.left = createNode(arr, begin, mid -1);
node.right = createNode(arr, mid + 1, end);
return node;
}
@Override
public boolean insertNode(BinarySearchTreeNode head, int value) {
if(null == head){
return false;
}
BinarySearchTreeNode newNode = new BinarySearchTreeNode();
newNode.value = value;
while(head != null){
if(head.value < value){
if(head.right == null){
head.right = newNode;
break;
}
head = head.right;
}else if(head.value > value){
if(head.left == null){
head.left = newNode;
break;
}
head = head.left;
}
}
return true;
}
@Override
public void showTree(BinarySearchTreeNode head) {
if(null == head){
return;
}
System.out.println(head.value);
showTree(head.left);
showTree(head.right);
}
这个二叉搜索树并不平衡,如果需要平衡的二叉树,请移步到二叉平衡树。