Java实现二叉搜索树的插入、删除

前置知识

二叉树的结构

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);
        }
    }

二叉搜索树的定义

  1. 左子树的所有节点大于当前节点
  2. 右子树的所有节点小于当前节点
  3. 每一个节点的值都不相同
  4. 中序遍历的结果是升序的

这些定义决定了它的优点: 查找效率快 ,因为二叉搜索树查找一个值时,自带二分查找的方式

下图就是一个标准的二叉搜索树

Java实现二叉搜索树的插入、删除_第1张图片

查找节点

给定一个值,使用循环在二叉搜索树中查找,找到该节点为止

  1. 从根节点开始,进行比较
  2. 给定值大于根节点就找右子树
  3. 给定值小于根节点就找左子树

代码实现如下

你可能感兴趣的:(Java,后端,数据结构,java,开发语言,后端,数据结构,程序人生)