20th Day| 235.二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作, 450.删除二叉搜索树中的节点
LeetCode 235 二叉搜索树的最近公共祖先
题目链接:235.二叉搜索树的最近公共祖先
/**递归法 */
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root.val > p.val && root.val > q.val){TreeNode left = lowestCommonAncestor(root.left, p, q);return left;}if(root.val < p.val && root.val < q.val) return lowestCommonAncestor(root.right, p, q);return root;}
}/** 迭代法 */
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {while(root != null){if(root.val > p.val && root.val > q.val) root = root.left;else if(root.val < p.val && root.val < q.val) root = root.right;else break;}return root;}
}
LeetCode 701 二叉树中的插入操作
题目链接:701.二叉搜索树中的插入操作
/** 能在叶子节点这找到插入的位置 */
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {TreeNode cur = root;TreeNode res= traversal(cur, val);return res;}public TreeNode traversal(TreeNode cur, int val){if(cur == null){TreeNode node = new TreeNode(val, null, null);return node;}if(val < cur.val){TreeNode left = traversal(cur.left, val);cur.left = left;}if(val > cur.val){TreeNode right = traversal(cur.right, val);cur.right = right;}return cur;}
}
LeetCode 450 删除二叉搜索树中的节点
题目链接:450.删除二叉搜索树中的节点
class Solution {public TreeNode deleteNode(TreeNode root, int key) {//终止条件没找到if(root == null) return null;if(root.val == key){//1.删除叶子节点if(root.left == null && root.right == null){return null;}//2.左节点不为空右节点为空else if(root.left != null && root.right == null){return root.left;}//3.左节点为空右节点不为空else if(root.left == null && root.right != null){return root.right;}else{//4.左右节点都不为空TreeNode cur = root.right;while(cur.left != null) cur = cur.left;cur.left = root.left;return root.right;}}if(key < root.val){root.left = deleteNode(root.left, key);} if(key > root.val){root.right = deleteNode(root.right, key);}return root;}
}