刷二叉树 纲领

深入理解前中后序

二叉树遍历框架

   

void traverse(TreeNode root) {

if (root == null) {

return;

}

// 前序位置

traverse(root.left);

// 中序位置

traverse(root.right);

// 后序位置

}

   

   

   

前中后序是遍历二叉树过程中处理每一个节点的三个特殊时间点,绝不仅仅是三个顺序不同的 List

前序位置的代码在刚刚进入一个二叉树节点的时候执行;

后序位置的代码在将要离开一个二叉树节点的时候执行;

中序位置的代码在一个二叉树节点左子树都遍历完,即将开始遍历右子树的时候执行。

   

二叉树的所有问题,就是让你在前中后序位置注入巧妙的代码逻辑,去达到自己的目的

   

   

两种解题思路

二叉树题目的递归解法可以分两类思路,第一类是遍历一遍二叉树得出答案,第二类是通过分解问题计算出答案,这两类思路分别对应着 回溯算法核心框架 和 动态规划核心框架。

   

   

   

综上,遇到一道二叉树的题目时的通用思考过程是:

是否可以通过遍历一遍二叉树得到答案?如果不能的话,是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?

   

   

   

只有后序位置才能通过返回值获取子树的信息。

那么换句话说,一旦你发现题目和子树有关,那大概率要给函数设置合理的定义和返回值,在后序位置写代码了

   

   

   

posted @ 2022-08-31 11:18  atomxing  阅读(22)  评论(0编辑  收藏  举报