二叉树的题目由于需要递归,大家都经常懵逼:
- 1 怎么有的时候函数的返回值是指针有的时候是void;
- 2 怎么有的时候需要判定根节点是否为空,有的时候又不需要;
- 3 以及回溯的时候有的时候显式,有的时候隐式回溯
- 4 怎么判断根节点
1 基本注意事项
做二叉树的题目的时候需要注意两点:
- 1 遍历方法
- 前序
- 中序
- 后序
- 2 返回值类型
- void:遍历操作。
- 指针类型:需要建立树;题目要求返回的是树指针。
2 根节点是否为空
判断根节点是否为空,看遍历顺序的时候是否对根节点的左右子树进行判空,择一即可。
2.1 根节点判空
根节点判空时,左右子树不需要判空。
2.2 根节点不判空
根节点不判空时,二叉树的左右子树需要判空。
3 显示和隐式回溯
如果进行下一个递归时:
- 1 不修改变量的值,一般需要显式回溯
- 2 修改变量的值并传入,为隐私回溯
3.1 显示回溯
3.2 隐式回溯
4 判断叶子节点
cur->left == nullptr and cur->right == nullptr
5 入口函数为两个子树的判断
需要分别针对两个子树判空:
- 1 左子树为空,右子树为空
- 2 左子树为空,右子树不为空
- 3 左子树不为空,右子树为空
- 4 左子树不为空,右子树不为空