代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
链接: 235. 二叉搜索树的最近公共祖先
链接: 701.二叉搜索树中的插入操作
链接: 450.删除二叉搜索树中的节点
自己看到题目的第一想法
235.二叉搜索树的最近公共祖先:对于普通二叉树的寻找最近公共祖先可以直接搬过来写,但是二叉搜索树既然限定了,肯定会有更多条件导致题目更加容易做。
701.二叉搜索树中的插入操作:直接按照原树和增加的值的节点重新构建一个二叉搜索树即可,因为答案是不唯一的,可以在原树的基础上插入也可以重新构建。最简单的思路就是重新构建。两种方法都做一下。
看完代码随想录之后的想法
701.二叉搜索树中的插入操作:看完答案之后其实我是很不理解的,插入val节点但是返回只有一个新建的val节点这不符合题意呀,因为题目要返回的是整个二叉树。决定去看看卡哥的视频。
自己实现过程中遇到哪些困难
235.二叉搜索树的最近公共祖先:这个题目和昨天的二叉树祖先题目相比,它又是不需要遍历整个树的,所以直接判断之后就返回了,我是不理解的。什么时候需要遍历整个,什么时候不需要。
701.二叉搜索树中的插入操作:递归结束条件如果当前节点为空,那么说明在根据节点值大小去选择方向遍历到了叶子节点的下一个位置,也就是节点应该插入的位置,把这个val节点返回之后,就返回给了上一层节点的叶子节点,也就是进行了插入操作。我终于理解了。不得不说,妙。
450.删除二叉搜索树中的节点 :自己实现的时候发现对于左右叶子节点均不为空的情况不是很清晰具体应该怎么去操作。再次看了视频发现了,root右侧子树最左的叶子节点是大于root的最小的值,这个节点作为根节点,把root的左子树合并在这里。
今日收获,记录一下自己的学习时长
1.针对二叉搜索树的添加节点和删除节点的递归操作有了更进一步的认识,能够自己写出代码
2.对递归有了更进一步的认识,感觉到了递归的妙。