首页 > 其他分享 >二叉树解题思路小记

二叉树解题思路小记

时间:2024-01-02 10:36:33浏览次数:34  
标签:子树 后序 前序 位置 解题 二叉树 节点 小记

二叉树前中后序位置

代码框架

void traverse(TreeNode root) {
    if (root == null) {
        return;
    }
    // 前序位置
    traverse(root.left);
    // 中序位置
    traverse(root.right);
    // 后序位置
}

代码写在不同的位置,只是执行的时间不同。

前序位置

刚刚进入二叉树节点的时候执行前序位置的代码。例如前序遍历的时候,先把当前节点添加到集合中,再处理左右子树节点。

中序位置

一般是指当前节点的左子树节点处理完以后,右子树处理前的时候执行的代码。例如中序遍历的时候,处理左子树节点,再添加当前节点到集合中。

后序位置

左右子树处理完成以后,离开当前节点的时候执行。例如后序遍历的时候,先把左右子树节点处理完,再添加当前节点到集合中。

前序和后序的异同点

  • 前序位置的代码执行可以理解为是自顶向下的,后序位置的代码执行是自底向上的
  • 前序位置的代码只能从函数参数中获取父节点传递的数据,后序位置的代码不仅可以获取参数数据,还可以获取的子树通过函数返回值传递回来的数据。

二叉树解题思路

解题思路有两种:第一类是遍历一遍二叉树得出答案,第二类是通过分解问题计算出答案

在当前节点处理,依次往子树递归,在叶子节点获得结果,这是遍历一遍二叉树得出答案。代码逻辑主要集中在前序位置

二叉树当前节点的结果,在左右子树的结果上产生,这就是分解问题计算答案的思路。代码逻辑主要集中在后序位置

解题思考过程

  1. 是否可以通过遍历一遍二叉树得到答案?如果不能的话,是否可以定义一个递归函数,通过一个子问题(子树)的答案推导出原问题的答案。
  2. 一旦发现题目和子树有关,大概率要给函数设置合理的定义和返回值,在后续位置写代码。

参考

labuladong.gitee.io/algo/1/7/


标签:子树,后序,前序,位置,解题,二叉树,节点,小记
From: https://blog.51cto.com/u_15812995/9063862

相关文章

  • 代码随想录算法训练营第二十天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,9
    一、654.最大二叉树题目链接:LeetCode654.最大二叉树学习:思路:前序遍历方法参数:(int[]nums,intstart,intend)返回类型:TreeNode终止条件:if(end-start==0)returnnull;if(end-start==1)returnnewTreeNode(nums[start]);单层递归逻辑:寻找数组中的最大......
  • 代码随想录算法训练营第十八天 | 513.找树左下角的值,112. 路径总和,113.路径总和ii,106.
    一、513.找树左下角的值题目链接:LeetCode513.找树左下角的值学习前:思路:层序遍历。采用递归和迭代两种方式递归:定义最大深度和目标值两个成员变量,方法参数是结点和当前结点的深度;返回类型为void;终止条件为结点为空;单次循环内容为判断该节点是否符合目标要求,且分别传入左子......
  • BJOI 2017 解题报告
    P3713机动训练关键在于trick:\(\suma_i^2\)可以视为两个人走了相同的路径的方案数,证明是容易的:对不同的机动路径求相同的方案数,每种个数为\(a_i\)的机动路径会产生\(a_i^2\)种本质相同的走法。如果令\(dp[x][y][a][b]\)为两个人分别走到\((x,y)\)和\((a,b)\)的本......
  • BJOI 2018 解题报告
    P4427[BJOI2018]求和谔谔题。这个问题看上去很不可维护,而且让我想到了P5305旧词。结果发现怎么\(k\le50\),那我直接跑\(50\)遍不就好了?P4429[BJOI2018]染色神仙题。考虑先用一些比较简单的情况搞到一些性质继续研究。那我们不妨只对原图黑白染色,得到性质“原图必为二分......
  • BJOI 2019 解题报告
    P5319[BJOI2019]奥术神杖数学题。搞掉几何平均数的方法是左右取对数,然后变成一个经典的\(0/1\)分数规划问题。解决方法是二分答案后AC自动机+DP。P5322[BJOI2019]排兵布阵简单题。随便DP即可,五分钟之内没想出这道题的赶快去加训。P5320[BJOI2019]勘破神机科技......
  • 二叉树的四种遍历-前序、中序、后序、层序
    目录一、易懂的形象理解1、先序遍历2、中序遍历3、后序遍历4、层序遍历二、真正理解三种遍历一、易懂的形象理解其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~先用我想的一种简单易懂的形象思维......
  • 二叉树遍历(C语言版)
    二叉树遍历先序递归int*res;voidpreorder(structTreeNode*root,int*returnSize){if(root==NULL)return;//根左右res[(*returnSize)++]=root->val;preorder(root->left,returnSize);preorder(root->right,returnSize);}int*pre......
  • 力扣543-二叉树的直径
    难度:【简单】定义:在一个二叉树中,任意两个节点之间的路径中最长的路径的长度称为其直径。路径长度由两个节点之间经过的“边”表示,而不是节点数。且二叉树的直径不一定经过根节点。先大致看了官方解法,不理解,心情暴躁没看懂,就自己瞎写。起初不理解直径不一定经过根节点。根据示......
  • 二叉树面试题解析
    二叉树面试题解析判断相同的树/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNode......
  • 算法学习Day18左下角的值,路径总和,构建二叉树
    #Day18左下角的值,路径总和,构建二叉树`ByHQWQF2023/12/30`##笔记***##513.找树左下角的值给定一个二叉树的**根节点**`root`,请找出该二叉树的 **最底层 最左边**节点的值。假设二叉树中至少有一个节点。**示例2:****输入:**\[1,2,3,4,null,5,6,null,null,7]**......