视频讲解:二叉搜索树找祖先就有点不一样了!| 235. 二叉搜索树的最近公共祖先_哔哩哔哩_bilibili
方法一:迭代
1.循环搜索: 当节点 root 为空时跳出。
a. 当 p,q 都在 root 的 右子树 中,则遍历至 root.right 。
b.否则,当 p,q 都在 root 的 左子树 中,则遍历至 root.left 。
c.否则,说明找到了 最近公共祖先 ,跳出。
2.返回值: 最近公共祖先 root 。
方法二:递归
1.递推工作:
a. 当 p,q 都在 root 的 右子树 中,则开启递归 root.right 并返回。
b. 否则,当 p,q 都在 root 的 左子树 中,则开启递归 root.left 并返回。
2.返回值: 最近公共祖先 root 。
701.二叉搜索树中的插入操作
题目链接/文章讲解:代码随想录
视频讲解:原来这么简单? | LeetCode:701.二叉搜索树中的插入操作_哔哩哔哩_bilibili
迭代解法
如果 root 是空,则新建树节点作为根节点返回即可。
否则:
1. 初始化 cur 指向 root。
2. 比较 cur.val 与目标值的大小关系:
如果 cur.val 大于目标值,说明目标值应当插入 cur 的左子树中,如果 cur.left 为 null,表明这是目标值可以插入的位置,直接插入并返回即可;否则 cur 指向 cur.left,重复步骤 2;
如果 cur.val 小于目标值,说明目标值应当插入 cur 的右子树中。如果 cur.right 为 null,表明这是目标值可以插入的位置,直接插入并返回即可;否则 cur 指向 cur.right,重复步骤 2。
递归解法
递归的写法还是简洁明了的,过程如下:
如果 root 是空,则新建树节点作为根节点返回即可。
否则比较 root.val 与目标值的大小关系:
如果 root.val 大于目标值,说明目标值应当插入 root 的左子树中,问题变为了在 root.left 中插入目标值,递归调用当前函数;
如果 root.val 小于目标值,说明目标值应当插入 root 的右子树中,问题变为了在 root.right 中插入目标值,递归调用当前函数。
450.删除二叉搜索树中的节点