Leetcode 701、二叉搜索树的插入

Leetcode 701、二叉搜索树的插入

在这里插入图片描述

二叉搜索树的特性是:left < root < right,在解题的时候要利用二叉搜索树的有序特性。题目中说明要插入的新值与当前树里面的所有值都不相同,所以不用考虑相等的情况。

1、递归

递归方法很容易就可以想到,比较当前根节点的值和要插入值的大小;
①如果,root.val > val,说明插入的节点要插入到左子树里面,所以进入下一次的递归,把val插入到左子树里面;
②如果,root.val < val,说明要插入到右子树里面,同样进入下一层递归,把val插入到右子树里面。
最后返回root。

	public TreeNode insertIntoBST(TreeNode root, int val) {
        if(root == null) {
            root = new TreeNode(val);
            return root;
        }

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

        return root; 
    }

2、迭代

对于迭代来说,首先判断当前根节点是否为null,如果为空直接把val赋值给根节点,返回root;
否则需要两个节点,curr和parent,初始化的时候都指向根节点。遍历curr,比较curr.val和val的大小,做出对应的操作,parent是curr的父节点,当退出循环的时候,说明curr== null,直接比较parent.val和val的代表,得出结果。

	/**
        2、迭代
     */
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if(root == null) {
            root = new TreeNode(val);
            return root;
        }

        TreeNode curr = root, parent = root;
        while(curr != null) {
            parent = curr;
            if(curr.val > val) {
                curr = curr.left;
            }else{
                curr = curr.right;
            }
        }

        if(parent.val > val) {
            parent.left = new TreeNode(val);
        }else{
            parent.right = new TreeNode(val);
        }

        return root;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值