235. 二叉搜索树的最近公共祖先
难度中等974
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if((p.val-root.val)*1L*(q.val-root.val) <=0)return root;
if(p.val < root.val)return lowestCommonAncestor(root.left,p,q);
if(p.val > root.val)return lowestCommonAncestor(root.right,p,q);
return null;
}
}
701. 二叉搜索树中的插入操作
难度中等407
给定二叉搜索树(BST)的根节点 root
和要插入树中的值 value
,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例 1:
class Solution {
TreeNode root;
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null)return new TreeNode(val);
this.root = root;
dfs(root,val);
return root;
}
public void dfs(TreeNode root,int val){
if(val < root.val){
if(root.left == null){
root.left = new TreeNode(val);
}else{
insertIntoBST(root.left,val);
}
}else if(val > root.val){
if(root.right == null){
root.right = new TreeNode(val);
}else{
insertIntoBST(root.right,val);
}
}
}
}
450. 删除二叉搜索树中的节点
难度中等1017
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
示例 1:
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null)return root;
if(key < root.val){
root.left = deleteNode(root.left,key);
}else if(key > root.val){
root.right = deleteNode(root.right,key);
}else{
if(root.left != null && root.right != null){
TreeNode tmp = root.right;
while(tmp.left != null){
tmp = tmp.left;
}
tmp.left = root.left;
return root.right;
}else if(root.left == null){
return root.right;
}else if(root.right == null){
return root.left;
}
}
return root;
}
}