二叉树的题目由于需要递归,大家都经常懵逼:

  • 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 左子树不为空,右子树不为空