235. 二叉搜索树的最近公共祖先
- 相比于236,这题加了个二叉搜索树的条件,236方法也能做,但是没利用搜索数的特性
- 理解:当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先
701.二叉搜索树中的插入操作
TreeNode* node(val); //当val不是一个确定的数时,这样会报错!!
//应该如下
TreeNode* node = new TreeNode(val);
//当node == nullptr时
root->val = val; //不可以!,因为root根本不存在
//应该如下
TreeNode* node = new TreeNode(val);
root = node;
450.删除二叉搜索树中的节点
- 较难,涉及到结构的调整,要把每一种情况都分析清楚
- 分析情况(五种情况):1、没有找到节点,不删;2、删除的是叶子节点;3、删除的不是叶子节点,左不为空,右为空,直接让父节点指向左孩子;4、删除的不是叶子节点,左为空,右不为空;5、删除的不是叶子节点,左右都不空,最复杂
- 用c++删除节点需要释放内存
TreeNode* temp = node; //将要删除的node节点空间保存标记一下
node = node->right; //给node这个名称赋新节点
delete temp; //删除原始node节点空间
- 删除节点的操作在终止条件里面,删除节点只是终止前的最后一步操作,并不是中间循环步骤
- 递归函数有返回值,返回子节点