0、定义
简单来说,二叉排序树要么是一棵空树,要么满足:左子树结点值 < 根结点值 < 右子树结点值
1、本文中二叉排序树的结构
class BSTreeNode {
BSTreeNode left; //左孩子
BSTreeNode right; //右孩子
int val; //值
public BSTreeNode() {
}
public BSTreeNode(int val) {
this.val = val;
}
}
2、二叉排序树的插入
/**
* 向二叉排序树中插入结点
* @param root
* @param val
* @return
*/
public static boolean insertBST(BSTreeNode root, int val) {
if(root == null) {
root = new BSTreeNode(val);
return true;
}
if(val < root.val) {
return insertBST(root.left, val);
} else if(val > root.val) {
return insertBST(root.right, val);
} else {
return false;
}
}
3、二叉排序树的构造
代码如下:
/**
* 构造二叉排序树
* @param nums
* @return
*/
public static BSTreeNode createBST(int[] nums) {
BSTreeNode root = null;
for(int i = 0; i < nums.length; i++) {
insertBST(root, nums[i]);
}
return root;
}
4、二叉排序树的查找
代码如下:
/**
* 在二叉排序树中查找值为val的结点
* @param root
* @param val
* @return
*/
public static BSTreeNode search(BSTreeNode root, int val) {
BSTreeNode node = root;
while(node != null && node.val != val) {
if(val < node.val) {
node = node.left;
} else {
node = node.right;
}
}
return node;
}