一、[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) {return lowestCommonAncestor(root.left, p, q);}//右子树if (root.val < p.val && root.val < q.val) {return lowestCommonAncestor(root.right, p, q);}return root;}}
二、[701]二叉搜索树中的插入操作
class Solution {//不新建树,作为叶子节点插入public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) {TreeNode node = new TreeNode(val);return node;}if (root.val > val) root.left = insertIntoBST(root.left, val);if (root.val < val) root.right = insertIntoBST(root.right, val);return root;}
}
三、[450]删除二叉搜索树中的节点
1、叶子节点的删除思路如上题
2、其他情况:引自代码随想录
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;}
}