235. 二叉搜索树的最近公共祖先
这道题的解题思路,我想了一会都没想出来,看了题解想:对于二叉搜索树,当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。怎么理解
因为节点6作为父节点,左右两边的范围是[0,6) (6,9], 肯定是公共父节点
但是其他节点,向下遍历的话比如8,左右两边的范围就是(6,8) (8,9]了,所以是第一次遇到的节点
701.二叉搜索树中的插入操作
自己想没想出来,看了题解,首先确定返回值,就是root,将root节点返回给上一层,用左右指针去接住,根据BST的特征,如果大于目标就向左子节点进行递归查找,一步步找到目标应该在的位置,也就是递归到出现null节点的位置,就是val目标节点应该放的位置,然后新建这个目标节点,返回给上一层递归接住
450.删除二叉搜索树中的节点
对于题解中的第五种情况,可以是将右指针放在左子树的最右边的节点的右指针,或者是将左指针放在右子树的最左边的节点的右指针
669. 修剪二叉搜索树
相比于删除节点,修剪的时候,如果当前节点的值小于min,则左子树肯定都小于要删除,所以相当于删除节点中的左指针为空的情况,使用右指针替代返回,但是这里要确保右子树也是在范围内的,所以要进一步调用递归右指针,然后返回右指针,大于max的时候同理
77. 组合
这里的剪枝优化,就是说以当前已有元素数量,如果当前起点位置算起,往后的所有元素加上都无法满足k的数量,那就没必要接着递归了,因为不够,可以在进入的时候判断,直接返回,也可以在for循环的时候,控制这种情况不进入递归方法