- 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;} }
-
该题的关键是利用二叉搜索树的特性,从上往下遍历,要知道第一个在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、左右子树都不为空