搜索二叉树的概念
二叉树左边的值小于根节点,右边的值大于根节点。 左子树 < 根节点 < 右子树 这样大大提升了代码搜索的效率。通过中序遍历可以得到一个有序的数组。
二叉树搜索模拟实现
搜索二叉树查找
给定一个值来判断数组中是否包含这个元素。 思想:
- 节点不能为空,为空说明没有元素。
- 明确左边的数都比根节点要小,而右边的树比根节点大,小往左走,大往右走,搜索到返回 true,超出条件返回 false(没有搜索到此元素)。
public boolean search(int val) {
TreeNode cur = this.root;
while (cur != null) {
if (val > cur.val) {
cur = cur.right;
} else if (val < cur.val) {
cur = cur.left;
} else {
return true;
}
}
return false;
}
时间复杂度:最好情况下 O(logN),最坏情况下 O(N)——在单支的情况下。
搜索二叉树插入
如果要插入数据,插入的数据大于根节点一直向右走,如果小于根节点则插入左树。如果一直大于则直到为空插入。因为遍历的 cur 为空出来后没有最后一个节点的位置,在插入之前需要定义一个 parent 来记录根节点,来确定放到左树或者右树。
public boolean insert(int val) {
if (this.root == null) {
this.root = new TreeNode(val);
return true;
}
TreeNode cur = this.root;
// 定义一个值来接收前一个父亲节点值
;
(cur != ) {
parent = cur;
(cur.val > val) {
cur = cur.left;
} (cur.val < val) {
cur = cur.right;
} {
;
}
}
(val);
(parent.val > val) {
parent.left = node;
} {
parent.right = node;
}
;
}


