前言
我在刷卡哥的“代码随想录”,自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接
题目
1.二叉搜索树特性递归找到要插入的位置(null的位置)
按照二叉搜索树特性递归
2. 本题思路分析:
递归三部曲:
- 参数与返回值:
- 参数:当前节点cur和需要插入节点的值val
- 返回值:返回TreeNode类型对象
- 终止条件:当前节点为null,说明找到了插入的位置,则创建一个以val为值的新TreeNode节点。
- 单层循环逻辑:
- 如果当前节点的值大于需要插入节点的值,则递归时用左孩子代入,并且递归函数的返回值用当前节点的左孩子接收;
- 如果当前节点的值小于需要插入节点的值,则递归时用右子树代入,并且递归函数的返回值用当前节点的右子树接收;
- 返回当前节点
3. 算法实现
class Solution {
TreeNode pre;
TreeNode root;
public TreeNode insertIntoBST(TreeNode cur, int val) {
if(cur == null){
TreeNode node = new TreeNode(val);
return node;
}
if(cur.val > val){
cur.left = insertIntoBST(cur.left,val);
}
if(cur.val < val){
cur.right = insertIntoBST(cur.right,val);
}
return cur;
}
}
4. 算法坑点
- 本题,当终止条件(cur==null)时,说明此时找到了要插入节点的位置(二叉搜索树),此时直接返回创建对应值的节点即可。
- 当前节点大于要插入节点的值,表明此时在向左子树中寻找可以插入新节点的位置,当cur.left代入参数时,注意这里最精妙的地方是递归函数返回值用cur.left接收。
if(cur.val > val){
cur.left = insertIntoBST(cur.left,val);
}