一. 什么是二叉搜索树?
二叉搜索树是一棵特殊的二叉树, 又称为二叉排序树, 其特性为:
- 空树也是二叉搜索树
- 若它的左子树不为空, 则左子树上所有节点值均小于根节点的值
- 若它的右子树不为空, 则右子树上所有节点值均大于根节点的值
- 二叉搜索树的左右子树也都是二叉搜索树
二叉搜索树通过中序遍历可以得到一个有序的序列
例如上图中, 中序遍历的结果为: 2 3 3 7 8 9 10 12 16 18
二. 关于二叉搜索树的操作
1. 增加一个节点
根据二叉搜索树的性质, 增加节点的思路如下:
- 假设在这棵二叉搜索树中, 不存在两个值相同的节点
- 要想插入一个节点, 就需要和二叉搜索树中的其他节点值进行比较, 从而找到其应该插入的地方
- 如果这个值 < 当前节点值, 就和当前节点的左子树进行比较
- 如果这个值 > 当前节点值, 就和当前节点的右子树进行比较
- 每次进行比较时, 都记录下父节点的位置
public class BSTree {
public static class Node {
public int val;
public Node left;
public Node right;
public Node(int val) {
this.val = val;
}
}
public Node root;
public boolean insertNode(int val) {
Node node = new Node(val);
// 如果二叉搜索树为空, 就将新插入的节点作为根节点并返回
if(root == null) {
root = node;
return true;
}
Node cur = root;
Node parent = null; // 表示 cur 节点的父节点
while (cur != null)