1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。
2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。
综上,遇到一道二叉树的题目时的通用思考过程是:
1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现。
2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值。
3、无论使用哪一种思维模式,你都要明白二叉树的每一个节点需要做什么,需要在什么时候(前中后序)做。
| 题目分类 | 题目编号 |
|---|---|
| 树与递归 | 100、222、101、226、437、563、617、508、572、543、654、687、87 |
| 树的层次遍历 | 102、429、690、559、662、671、513、515、637、103、107、257、623、653、104、111、112、113、129、404、199、655、116、117 |
| 树的前序遍历 | 144、589 |
| 树的前序序列化 | 606、331、652、297、449 |
| 树的后序遍历 | 145、590 |
| 树的中序遍历与二叉搜索树 | 94、700、530、538、230、98、173、669、450、110、95、108、109 |
| 重构二叉树 | 105、106 |
| 二叉树的展开 | 114 |
| 最近公共祖先 | 235、236 |
| Morris中序遍历 | 501、99 |
| 四叉树 | 558、427 |
