day22||第六章 二叉树part08: ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

 ● 235. 二叉搜索树的最近公共祖先 

第一个方法就是用d21类似题目的方法,有通用性,第二个方法就是利用了二叉搜索树的特性。

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null) return null;
        if(root.val>p.val&&root.val>q.val){
            TreeNode left = lowestCommonAncestor(root.left,p,q);
            if(left!= null) return left;
        }
        if(root.val<p.val&&root.val<q.val){
            TreeNode right = lowestCommonAncestor(root.right,p,q);
            if(right!= null) return right;
        }
        return root;
    }
}

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

我自己想的,但是一开始有问题,是while内的条件考虑错了,考虑的不全面。用gpt改出来了。

class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        if(root == null) return new TreeNode(val);
        TreeNode head = root;
        while(true){
        if(val<head.val){
            if(head.left==null){
            head.left = new TreeNode(val);
            break;
        }
            head = head.left;
        }else{
            if(head.right==null){
            head.right =new TreeNode(val);
            break;
        }
            head = head.right;
        }
        }
        return root;
    }
}

感觉要不还是递归吧。。。

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

● 450.删除二叉搜索树中的节点

我不知道该return什么东西

分清楚有哪些情况。

class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root == null) return null;/第一种情况,压根没找到结点
        if(root.val == key){
            if(root.left==null&&root.right==null) return null;
            else if(root.left==null&&root.right!=null) return root.right;
            else if(root.left!=null&&root.right==null) return root.left;
            else{
                TreeNode cur = root.right;//找最最左边的结点
                TreeNode head = cur;//保存一下cur最开始的结点。
                while(cur.left!=null){
                    cur=cur.left;
                }
                cur.left = root.left;
                return head;
            }
        }

        if(key<root.val){
            root.left = deleteNode(root.left,key);
        }
        if(root.val< key){
            root.right = deleteNode(root.right,key);
        }
        return root;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值