LeetCode 701 二叉搜索树的插入操作
本题思路:既然是二叉搜索树,那么插入就变得比较简单了。因为二叉搜索树的左树节点值都小于根节点值,右树节点值都大于根节点值。
直接将要插入的节点值和根节点进行对比,如果比它小,就往左孩子走,比他大,就往右孩子走。最右直到为空的时候,此时这个位置就是要插入的位置。 再移动的过程中,可以用一个指针来记录父节点的位置。再定义一个标识来判断是走的左孩子还是右孩子。
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
TreeNode node = new TreeNode(val);
TreeNode cur = root;
TreeNode pre = null;
boolean flag = true;
if(cur == null){
return node;
}
while(cur != null){
if(node.val > cur.val){
pre = cur;
cur = cur.right;
flag = true;
}else{
pre = cur;
cur = cur.left;
flag = false;
}
}
if(flag){
pre.right = node;
}else{
pre.left = node;
}
return root;
}
}
LeetCode 235 二叉搜索树的最近公共祖先
本题思路:使用后序遍历。首先判断一些边界条件,递归的出口。
- 如果根节点为空,或者 等于 q ,等于 p,直接返回即可
- 再判断左树中,是否有 p、q 节点
- 再判断右树中,是否有 p、q 节点
- 最后,在进行最终判断
- 如果左树右树都不为空,则 root 节点就是 最近公共祖先
- 如果左树为空,右树不为空,则最近公共祖先就是 右树的不为空的节点
- 如果右树为空,左树不为空,则最近公共祖先就是 左树的不为空的节点
- 如果两个都为空,直接返回 null
class Solution {
public