首页
学习
活动
专区
圈层
工具
发布

前序、中序、后序遍历二叉树通用公式

:中左右,即先自身、再左边、后右边 注意:我这里用的概念是“树”,而不是“节点”,就是把每一个节点都当成一颗树 根据规则,先遍历当前树,当前树的根节点是A,所以首先遍历的就是A ?...,也就是二叉树C 把C作为一棵独立的树进行前序遍历 根据“中左右”的次序,先遍历当前树的根节点C,所以目前的遍历次序就是A->B->D->E->H->C ?...同样的中序遍历的顺序就是“左中右”、后序遍历的顺序就是“左右中” 左右的相对位置不变,前、中、后指的其实就是“中”在“左右”中的位置 2....代码实现 还是以前序遍历为例,根据“中左右”的通用公式 采用递归的方法,一次拿到每棵树的左、中、右三个节点的内容 然后再按照中、左、右的次序加入一个列表,就能实现二叉树的前序遍历了 2.1 前序遍历 public...中序遍历也是几乎同样的代码 只不过在加入列表的顺序改成左、中、右就可以了 public List inorderTraversal(TreeNode root) { List

6.3K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    二叉树的通用遍历模板

    遍历一棵二叉树,主要分为前序遍历、中序遍历和后序遍历三种方式,不同的方式输出的顺序不同: 前序遍历: 根节点->左节点->右节点 中序遍历: 左节点->根节点->右节点 后序遍历: 左节点->右节点->...根节点 本文将介绍递归、迭代、标记迭代以及莫里斯迭代四种方式的通用模板,对二叉树分别进行前中后序遍历,以及每种方式的特点。...因为在递归过程中会用到logn的栈空间,如果一棵树所有节点都只有右节点或左节点,也就是说变成了一个链表,那么会用到O(n)的栈空间,所以在最坏情况下,空间复杂度是O(n)。...标记迭代 相较于普通迭代,标记迭代显得更容易理解,它除了在辅助栈中缓存节点外,还额外记录了这个节点的状态(0、1表示),0表示未访问,1表示已访问,第一次进栈的节点都是未访问状态,只有第二次进栈才会标记为已访问...continue else: res.append(root.val) root=root.left return res[::-1] 在莫里斯迭代中

    43320

    树的遍历--树的广度遍历(层次遍历),深度遍历(前序遍历,中序遍历,后序遍历的递归和非递归实现)

    spring-jpa,webjars,Aspect,drools-drt,rabbitmq,zookeeper,mongodb,mysql存储过程,前端的延迟加载,netty,postgresql 这次就来整合下 树的遍历...前序遍历,中序遍历,后序遍历的区别就是根在前(根左右),根在中(左根右),根在后(左右根) 在最后补全所有源码 二 广度优先遍历 层次遍历 //广度优先遍历 层次遍历 public...//中序遍历 public void inOrder(TreeNode subTree) { if (subTree !...= null) { //递归在左子树中搜索 return p; } else { //递归在右子树中搜索...)遍历*****************"); bt.preOrder(bt.root); System.out.println("*******(中序遍历)遍历***

    5.5K40

    前序遍历和中序遍历树构造二叉树

    题意 根据前序遍历和中序遍历树构造二叉树. 注意事项: 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]....返回如下的树: 2 / \ 1 3 思路 根据前序遍历和中序遍历的规律可得: 前序遍历的第一个就是整个树的根节点 这个根节点在中序遍历的左侧是其左子树,右侧是右子树。...将每一个节点都看作是一个单独的树,根据此 规律1 和 规律2 依次递归获取其左右子树的前序与中序遍历,直到前序遍历或中序遍历的长度仅剩1,则说明该节点为叶子节点,从而构造整棵树。...TreeNode treeRoot = new TreeNode(root); int flag = -1; // flag用于存放根节点root在中序遍历中的位置 for (int...treeRoot.right = buildTree(child_PreorderRight,child_InorderRight); return treeRoot; } } 原题地址 LintCode:前序遍历和中序遍历树构造二叉树

    2K40

    二叉树---(3)前序遍历,中序遍历,后序遍历

    很多朋友在刚开始接触二叉树时,对前序遍历,中序遍历,后序遍历这三个遍历方式不太了解,很多博客中,上来就是实现方式,并没有清晰的阐述这三种遍历的步骤和顺序,这里记录一下。        ...所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。...遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。         按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。...前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍历:左子树->右子树->根节点 注意:在做前序遍历时,左右子树也是按照前序遍历的顺序, 同理,在做中序遍历时,左右子树也是按照中序遍历的顺序...例1:求下面树的三种遍历 ? 前序遍历:abdefgc 中序遍历:debgfac 后序遍历:edgfbca 例2:求下面树的三种遍历 ?

    94520

    二叉树的先序遍历、中序遍历、后序遍历

    1 问题 Python中二叉树的先序遍历、中序遍历、后序遍历。 2 方法 先序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 访问根结点; ⑵ 遍历左子树; ⑶ 遍历右子树。...中序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树; ⑵ 访问根结点; ⑶ 遍历右子树。...后序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树;⑵ 遍历右子树;⑶ 访问根结点。...:') btree.front_search(btree.base) print('中序遍历:') btree.middle_search(btree.base) print('后序遍历:') btree.behind_search...(btree.base) 3 结语 我们针对Python中二叉树的先序遍历、中序遍历、后序遍历的问题,运用书上相应的基础知识,通过代码运行成功证明该方法是有效的,二叉树的遍历的应用非常广泛,希望通过未来的学习我们能写出更多长的

    48310

    树的遍历(已知前序遍历中序遍历求后序遍历,或者已知后序中序求先序)

    假设是1000个结点以内, 输入前序  4 1 3 2 6 5 7        中序  1 2 3 4 5 6 7  得到后续  2 3 1 5 7 6 4 已知前序遍历中序遍历求后序遍历: import...,建树 // @param pre 先序遍历的数组 // @param lo 先序遍历的起点下标 // @param in 中序遍历的数组 // @param ini 中序遍历的起点下标...ini + i + 1, n - i - 1); // 右区间 // 最后一个参数是这个子树的有多少结点 return node; } } 题目描述 输入某二叉树的前序遍历和中序遍历的结果...,请重建出该二叉树。...假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    53720

    每日精讲:⼆叉树的构建及遍历⼆叉树的前中后序遍历

    (我的文章中数据结构专栏-二叉树的链式结构中实现了二叉树的前序遍历) 1.5解决代码 2 二叉树的中序遍历 2.1题目链接:94....二叉树的中序遍历 - 力扣(LeetCode) 2.2题目描述:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。...2.3题目示例: 2.4题目思路; 【1】根据题目实现函数里面有一个数组,所以我们要求结点的个数来确定数组的大小 【2】在看实现函数的返回值是一个(int*),所以我们在中序遍历时不在是打印而是将数据导入数组在返回数组...(我的文章中数据结构专栏-二叉树的链式结构中实现了二叉树的中序遍历) 2.5解决代码: 3 二叉树的后序遍历 3.1题目链接:145....(我的文章中数据结构专栏-二叉树的链式结构中实现了二叉树的后序遍历) 3.5解决代码: 4 ⼆叉树的构建及遍历 4.1题目链接:二叉树遍历_牛客题霸_牛客网 4.2题目描述:编一个程序,读入用户输入的一串先序遍历字符串

    22910

    二叉树的先序遍历 中序遍历 后序遍历 层序遍历

    对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。...也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树 二叉树的遍历 先序遍历 :先遍历根节点,再遍历左节点,最后遍历右节点 中序遍历 :先遍历左节点,再遍历根节点,最后遍历右节点...后序遍历 :先遍历左节点,再遍历右节点,最后遍历根节点 层序遍历 : 自上而下,自左至右逐层访问树的结点的过程就是层序遍历 遍历方法的实现 先建立一棵树 用代码建立以上树 class Node...System.out.print(root.val+" "); preOrder(root.left); preOrder(root.right); } 下面进行中序遍历...= null){ stack.push(top.left); } } } // 二叉树的中序遍历,非递归迭代实现

    1.5K20
    领券