LeetCode235.二叉搜索树的最近公共祖先
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 return root;
}
return root;
}
LeetCode701.二叉搜索树中的插入操作
public TreeNode insertIntoBST(TreeNode root, int val) {
//root为空情况
if(root==null) return new TreeNode(val);
//保存结点
TreeNode head = root;
TreeNode temp = root;
//找到对应位置
while(root!=null) {
temp=root;
if(root.val>val) {
root=root.left;
}else if(root.val<val) {
root=root.right;
}
}
//添加结点
if(temp.val<val) {
temp.right=new TreeNode(val);
}else {
temp.left=new TreeNode(val);
}
return head;
}
LeetCode450.删除二叉搜索树中的节点
public TreeNode deleteNode(TreeNode root, int key) {
// root为空情况
if (root == null) return null;
// 如果要删除的节点是根节点,并且只有一个孩子或者没有孩子
if (root.val == key) {
if (root.left == null) return root.right;
if (root.right == null) return root.left;
// 找到右子树的最左节点
TreeNode minRight = root.right;
while (minRight.left != null) {
minRight = minRight.left;
}
minRight.left = root.left;
return root.right;
}
// 保存根节点
TreeNode head = root;
TreeNode temp = root;
// 找到要删除的节点
while (root != null && root.val != key) {
temp = root;
if (root.val > key) {
root = root.left;
} else {
root = root.right;
}
}
// 不存在 key 节点
if (root == null) return head;
// 删除节点
if (root.left == null && root.right == null) {
if (temp.left == root) {
temp.left = null;
} else {
temp.right = null;
}
} else if (root.left == null) {
if (temp.left == root) {
temp.left = root.right;
} else {
temp.right = root.right;
}
} else if (root.right == null) {
if (temp.left == root) {
temp.left = root.left;
} else {
temp.right = root.left;
}
} else {
TreeNode minRight = root.right;
while (minRight.left != null) {
minRight = minRight.left;
}
minRight.left = root.left;
if (temp.left == root) {
temp.left = root.right;
} else {
temp.right = root.right;
}
}
return head;
}