代码随想录算法训练营29期|day 22 任务以及具体安排

发布时间:2024年01月17日
  • ?235.?二叉搜索树的最近公共祖先?
  • 
    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;
        }
    }

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

  • 该题的关键是利用二叉搜索树的特性,从上往下遍历,要知道第一个在p和q之间的节点就是最近公共祖先,因为不管向右遍历还是向左遍历,都会丢失p或者q。

  • ?701.二叉搜索树中的插入操作?
  • class Solution {
        public TreeNode insertIntoBST(TreeNode root, int val) {
            if (root == null) // 如果当前节点为空,也就意味着val找到了合适的位置,此时创建节点直接返回。
                return new TreeNode(val);
                
            if (root.val < val){
                root.right = insertIntoBST(root.right, val); // 递归创建右子树
            }else if (root.val > val){
                root.left = insertIntoBST(root.left, val); // 递归创建左子树
            }
            return root;
        }
    }

    该题的关键是知道把值插在叶子节点的左右,当root==null时,就是插入的时机。

  • ?450.删除二叉搜索树中的节点?
  • class Solution {
      public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) return root;
        if (root.val == key) {
          if (root.left == null) {
            return root.right;
          } else if (root.right == null) {
            return root.left;
          } else {
            TreeNode cur = root.right;
            while (cur.left != null) {
              cur = cur.left;
            }
            cur.left = root.left;
            root = root.right;
            return root;
          }
        }
        if (root.val > key) root.left = deleteNode(root.left, key);
        if (root.val < key) root.right = deleteNode(root.right, key);
        return root;
      }
    }

    该题的关键是要考虑五种情况:1、没有找到key 2、key在叶子节点 3、key所在的节点左子树为空,右子树不为空 4、key所在的节点左子树不为空,右子树为空 5、左右子树都不为空?

文章来源:https://blog.csdn.net/m0_68520551/article/details/135658529
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。