目录
🎈LeetCode235.二叉搜索树的最近公共祖先
🎈LeetCode701.二叉搜索树中的插入操作
🎈LeetCode450.删除二叉搜索树中的节点
🎈LeetCode235.二叉搜索树的最近公共祖先
链接:235.二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==p || root==q || root==null){
return root;
}
if(root.val<p.val && root.val<q.val){
return lowestCommonAncestor(root.right,p,q);
}else if(root.val>p.val && root.val>q.val){
return lowestCommonAncestor(root.left,p,q);
}else{
return root;
}
}
🎈LeetCode701.二叉搜索树中的插入操作
链接:701.二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点
root
和要插入树中的值value
,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root==null){
return new TreeNode(val);
}else if(root.val<val){
root.right= insertIntoBST(root.right,val);
}else{
root.left= insertIntoBST(root.left,val);
}
return root;
}
🎈LeetCode450.删除二叉搜索树中的节点
链接:450.删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
- 首先找到需要删除的节点;
- 如果找到了,删除它。
public TreeNode deleteNode(TreeNode root, int key) {
if(root==null){
return null;
}
if(root.val==key){
if(root.left==null && root.right==null){
return null;
}else 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;
}
}else if(root.val<key){
root.right= deleteNode(root.right,key);
}else{
root.left= deleteNode(root.left,key);
}
return root;
}