前置知识
二叉树的结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
}
中序遍历
- 中序遍历:对于每一个节点,遍历顺序是:左子树->当前节点->右子树
- 中序遍历得到的第一个节点是没有左子树的(也许是叶子节点,也许有右子树)
- 同理,中序遍历的最后一个节点没有右子树
代码递归实现
public void inorder_traversal(TreeNode root) {
if (root == null) {
return;
}
if (root.left != null) {
inorder_traversal(root.left);
}
System.out.println(root.val);
if (root.right != null) {
inorder_traversal(root.right);
}
}
二叉搜索树的定义
- 左子树的所有节点大于当前节点
- 右子树的所有节点小于当前节点
- 每一个节点的值都不相同
- 中序遍历的结果是升序的
这些定义决定了它的优点: 查找效率快 ,因为二叉搜索树查找一个值时,自带二分查找的方式
下图就是一个标准的二叉搜索树
查找节点
给定一个值,使用循环在二叉搜索树中查找,找到该节点为止
- 从根节点开始,进行比较
- 给定值大于根节点就找右子树
- 给定值小于根节点就找左子树
代码实现如下