写点什么

代码随想录 Day22 - 二叉树(八)

作者:jjn0703
  • 2023-07-23
    江苏
  • 本文字数:1571 字

    阅读完需:约 5 分钟

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

二叉搜索树,顺序查找,找到根节点,


/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root.val > p.val && root.val > q.val) return lowestCommonAncestor(root.left, p, q); if (root.val < p.val && root.val < q.val) return lowestCommonAncestor(root.right, p, q); return root; }}
复制代码


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

/** * Definition for a binary tree node. * 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; *     } * } */class Solution {    public TreeNode insertIntoBST(TreeNode root, int val) {        if (root == null) return new TreeNode(val);        TreeNode newRoot = root;        TreeNode pre = root;        while (root != null) {            pre = root;            if (root.val > val) {                root = root.left;            } else if (root.val < val) {                root = root.right;            }         }        if (pre.val > val) {            pre.left = new TreeNode(val);        } else {            pre.right = new TreeNode(val);        }
return newRoot; }}
复制代码


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


  • 第一种情况:没找到删除的节点,遍历到空节点直接返回了

  • 找到删除的节点

  • 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回 NULL 为根节点

  • 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点

  • 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点

  • 第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。

/** * Definition for a binary tree node. * 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; *     } * } */class Solution {    public TreeNode deleteNode(TreeNode root, int key) {        root = delete(root,key);        return root;    }
private TreeNode delete(TreeNode root, int key) { if (root == null) return null;
if (root.val > key) { root.left = delete(root.left,key); } else if (root.val < key) { root.right = delete(root.right,key); } else { if (root.left == null) return root.right; if (root.right == null) return root.left; TreeNode tmp = root.right; while (tmp.left != null) { tmp = tmp.left; } root.val = tmp.val; root.right = delete(root.right,tmp.val); } return root; }}
复制代码


用户头像

jjn0703

关注

Java工程师/终身学习者 2018-03-26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
代码随想录 Day22 - 二叉树(八)_jjn0703_InfoQ写作社区