首页 > 其他分享 >根据后序遍历完全二叉树构建树并输出中序遍历

根据后序遍历完全二叉树构建树并输出中序遍历

时间:2024-12-07 18:27:45浏览次数:10  
标签:index 遍历 递归 后序 int 中序 索引 二叉树

来看这道题:

之前编者想了很久,该如何仅根据后序序列建树,在反复研磨遍历的特征后,我突然发现:
对于完全二叉树,我们完全可以采用其在线性表示(用数组)的性质解题

性质:根节点x ,  左子树索引为 2x , 右子树索引为 2x+1 且不为空。

则,我们只需按后序遍历的特点递归建树即可。

上代码:
 

int ind = 0; // 后序序列索引
void getPTree(int post[], int index, int N, int result{}){
    if(index > N) return; // 超出索引范围
    else{ // 按后序的思想
        getPTree(post, index<<1, N, result); // 先进行左子树的搭建 index<<1即index*=2
        getPTree(post, (index<<1)+1, N, result); // 后进行右子树的搭建
        result[index-1] = post[ind++]; // 下标从0开始
    }  
    return; // 搭建完成
}
  • 后序遍历的特点是:先访问左子树,再访问右子树,最后访问根节点。递归调用 getPTree 时,先递归处理左子树(index << 1),再处理右子树((index << 1) + 1),最后将当前节点的值填入 result[] 数组。这种递归结构精确模拟了后序遍历的顺序。
  • 递归的结束条件是 index > N,即当 index 超过树的节点数时,停止递归,确保不会越界访问。

标签:index,遍历,递归,后序,int,中序,索引,二叉树
From: https://blog.csdn.net/2401_87092242/article/details/144314285

相关文章

  • 写一个方法遍历指定对象的所有属性
    functionenumerateProperties(obj){constproperties=[];for(constkeyinobj){if(obj.hasOwnProperty(key)){//过滤掉继承的属性properties.push({name:key,value:obj[key]});}}returnproperties;}//......
  • 数据结构5——二叉树
    走上计算机的道路,疲惫和无力会不断向你袭来。虽途艰路险,然功成之日,往昔困厄皆为序章,亦足慰心怀,堪称圆满。目录1.树概念及结构1.1树的概念1.2树的相关概念1.3树的表示1.4树在实际中的运用(表示文件系统的目录树结构)2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3特......
  • 洛谷P1305 新二叉树(c嘎嘎)
    题目链接:P1305新二叉树-洛谷|计算机科学教育新生态题目难度:普及刷题心得:做了几道这种类型的题都不用建树就可以解决,基本上还是利用好树的结构,例如这道题求前序序列(根左右)是可以用递归来求的。无非就是先从根出发,递归遍历左子树,递归遍历右子树,遇到 *直接返回就行了......
  • powershell遍历注册dll
    #设置要遍历的根文件夹路径,你可以根据实际情况修改这个路径$rootFolder="C:\script\dlls"#获取该文件夹及其子文件夹下所有的.dll文件$dllFiles=Get-ChildItem-Path$rootFolder-Filter"*.dll"-Recurse#遍历每个找到的.dll文件并尝试注册foreach($dllFilein$dllFi......
  • 数据结构——图(遍历,最小生成树,最短路径)
    目录一.图的基本概念二.图的存储结构1.邻接矩阵2.邻接表三.图的遍历1.图的广度优先遍历2.图的深度优先遍历四.最小生成树1.Kruskal算法2.Prim算法五.最短路径1.单源最短路径--Dijkstra算法2.单源最短路径--Bellman-Ford算法3.多源最短路径--Floyd-Warshall算法......
  • 二叉树遍历
    [Algo]二叉树遍历二叉树节点类型定义:structBinaryTreeNode{intval;BinaryTreeNode*left;BinaryTreeNode*right;BinaryTreeNode(intx):val(x),left(nullptr),right(nullptr){}};1.前序遍历//1.非递归前序遍历二叉树//(1)弹出栈顶(2)......
  • java实现树的遍历
    packagetree;importjava.util.*;publicclassBinaryTree{ publicTreeNoderoot; publicvoidinsert(intdate) { TreeNodenewNode=newTreeNode(date); if(root==null) { root=newNode; return; } TreeNodecurrentNode=root; while(true) {......
  • 关于二叉树的先/中/后序的非递归遍历
    力扣上有原题~中 先后前言先前跟着acwing学习算法基础课,自以为已经掌握了基础的算法和数据结构,剩下就差做题了,结果之后在力扣和洛谷上看到有关二叉树的题目,完全不知道是怎么一回事,故开始二叉树的学习(果然学习数据结构基础不能光看课)正文本片文章主要讲述二叉树的先中后......
  • 算法之旅:二叉树的删除、验证与插入(98,700,701,450)
    ......
  • LeetCode102 二叉树的层序遍历
    LeetCode102二叉树的层序遍历题目链接:LeetCode102描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思路方法一:迭代方式--借助队列方法二:递归方式代码方法......