美文网首页数据结构与算法
Leetcode 701 二叉搜索树中的插入操作

Leetcode 701 二叉搜索树中的插入操作

作者: itbird01 | 来源:发表于2021-12-21 07:24 被阅读0次

701. 二叉搜索树中的插入操作

题意:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

解题思路

解法1:
1.遍历root,遍历过程中,需要找到val可以插入的点,所以需要判断条件p.val < val,如果小于等于,则在左子树继续寻找空节点,如果大于,则在右子树继续寻找空节点
2.找到空节点,每次遍历,pre保存遍历到的节点的上一节点
3.此时p为空,但是pre是发现的空节点的父节点
4.将val插入到pre的左子树(pre.val >= val)或者右子树(pre.val < val

解题遇到的问题

后续需要总结学习的知识点

需要深入总结学习二叉搜索树的数据结构的特点、应用、搜索、插入、删除

##解法1
class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if (root == null) {
            return new TreeNode(val);
        }

        TreeNode preNode = root, p = root;
        // 遍历root,找到空节点
        while (p != null) {
            // 每次遍历,保存遍历到的节点的上一节点
            preNode = p;
            p = p.val < val ? p.right : p.left;
        }
        // 此时p为空,但是pre是发现的空节点的父节点
        if (preNode.val < val) {
            preNode.right = new TreeNode(val);
        } else {
            preNode.left = new TreeNode(val);
        }
        return root;
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {
        }
        TreeNode(int val) {
            this.val = val;
        }
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
}

相关文章

网友评论

    本文标题:Leetcode 701 二叉搜索树中的插入操作

    本文链接:https://www.haomeiwen.com/subject/hjkzfrtx.html