代码随想录算法训练营第20天 | Binary Tree - 07

(Medium) 235. Lowest Common Ancestor of a Binary Search Tree

Methed: Iteration, queue, traverse by level
Time Complexity: O ( l o g ( n ) ) O(log(n)) O(log(n))

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root,
        TreeNode p, TreeNode q) {
      Deque<TreeNode> dq = new LinkedList<>();
      dq.offer(root);
      while(!dq.isEmpty()) {
        TreeNode head = dq.poll();
        if ((head.val >= q.val && head.val <= p.val) 
          || (head.val >= p.val && head.val <= q.val)) {
            return head;
          }
        if (head.left != null) {
          dq.offer(head.left);
        } 
        if (head.right != null) {
          dq.offer(head.right);
        } 
      }
      return null;
    }
}

(Medium) 701. Insert into a Binary Search Tree

Method: Recursion
Time Complexity: O ( l o g ( n ) ) O(log(n)) O(log(n))

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

(Medium) 450. Delete Node in a BST

Method: Recursion
Time Complexity: O ( l o g ( n ) ) O(log(n)) O(log(n))

在这里插入图片描述

class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
      if (root == null) { return root; }
      // Delete the node


      if (root.val == key) {

        if (root.left == null && root.right == null) { return null; }
        if (root.left == null && root.right != null) { return root.right; }
        if (root.right == null && root.left != null) { return root.left; }

        // Both left and right subtrees are not empty
        TreeNode leftMost = root.right;
        while (leftMost.left != null) { leftMost = leftMost.left; }
        leftMost.left = root.left;
        return root.right;
      } 
      // Continue search
      if (root.val > key) {
        root.left = deleteNode(root.left, key);
      } else {
        root.right = deleteNode(root.right, key);
      }
      
      return root;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值