Java 求解二叉搜索树中的插入操作

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解二叉搜索树中的插入操作相关的知识,希望对你有一定的参考价值。

一、题目

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

二、迭代法

该题可以利用二叉搜索树的特性,找到要插入的节点,插入即可

搜索过程中,需要前驱节点记录要插入的位置

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        //当前节点为空,直接返回新插入的节点为根节点
        if (root == null) {
            return new TreeNode(val);
        }
        TreeNode cur = root;
        //需要前驱节点记录要插入的位置
        TreeNode pre = root;
        while (cur != null) {
            pre = cur;
            //左子树查找
            if (cur.val > val) {
                cur = cur.left;
            } else {//右子树查找
                cur = cur.right;
            }
        }
        //根据前驱确定要插入的位置
        if (pre.val > val) {
            pre.left = new TreeNode(val);
        } else {
            pre.right = new TreeNode(val);
        }
        return root;
    }
}

三、递归法

(1)确定递归参数及返回值

(2)确定递归终止条件

终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。

if (root == null) {
	return new TreeNode(val);
}

(3)确定单层递归逻辑

不需要遍历整个树,根据比较当前节点值和目标值的关系,遍历一条边即可

		if (root.val > val) {
            root.left = insertIntoBST(root.left, val);
        }
        if (root.val < val) {
            root.right = insertIntoBST(root.right, val);
        }

通过递归函数返回值完成了新加入节点的父子关系赋值操作了,下一层将加入节点返回,本层用root->left或者root->right将其接住

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if (root == null) {
            return new TreeNode(val);
        }
        if (root.val > val) {
            root.left = insertIntoBST(root.left, val);
        }
        if (root.val < val) {
            root.right = insertIntoBST(root.right, val);
        }
        return root;
    }
}

四、总结

利用二叉搜索树的特性

注意二叉搜索树的迭代写法

需要搜索单条边的写法

以上是关于Java 求解二叉搜索树中的插入操作的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记—701. 二叉搜索树中的插入操作

二叉树:搜索树中的插入操作

Java 求解删除二叉搜索树中的节点

⭐算法入门⭐《二叉树 - 二叉搜索树》中等03 —— LeetCode 701. 二叉搜索树中的插入操作

Java 求解二叉搜索树中的众数

Java 求解二叉搜索树中的搜索