算法一

//利用先序序列和后序序列的关系直接转
void PreToPost(ElemType pre[], int l1, int h1, ElemType post[], int l2, int h2){int half;if(h1>=l1){post[h2] = pre[l1];half = (h1-l1)/2;PreToPost(pre,l1+1,l1+half,post,l2,l2+half-1);PreToPost(pre,l1+half+1,h1,post,l2+half,h2-1);}
} 

算法二

//利用栈将满二叉树先序序列创建树 ,再对树进行后序遍历
BiTree PreToPost(ElemType *t, int num){int h = height(num);int front = 0;stack[s] = (BiTree)malloc(sizeof(BiNode));stack[s]->date = t[front++];stack[s]->lchild = NULL;stack[s]->rchild = NULL;s++;while(front != num){if((stack[s-1]->lchild&&stack[s-1]->rchild) || s==h)s--;else{stack[s] = (BiTree)malloc(sizeof(BiNode));stack[s]->date = t[front++];stack[s]->lchild = NULL;stack[s]->rchild = NULL;if(stack[s-1]->lchild==NULL) stack[s-1]->lchild = stack[s];else stack[s-1]->rchild = stack[s];s++;}}return stack[0];
} 

测试环境

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
#define ElemType char
//满二叉树的先序序列
//abdecfg
//abdhiegkcflmgno
typedef struct BiNode{char date;struct BiNode *lchild,*rchild;
}BiNode,*BiTree;BiTree PreToPost(ElemType *t, int num);
int height(int num);
void Traverse(BiNode *p);int main(){char c[]="abdhiegkcflmgno";BiTree t = PreToPost(c,15);Traverse(t);return 0;
}BiTree stack[maxsize];
int s=0;
//利用栈将满二叉树先序序列创建树 ,再对树进行后序遍历
BiTree PreToPost(ElemType *t, int num){int h = height(num);int front = 0;stack[s] = (BiTree)malloc(sizeof(BiNode));stack[s]->date = t[front++];stack[s]->lchild = NULL;stack[s]->rchild = NULL;s++;while(front != num){if((stack[s-1]->lchild&&stack[s-1]->rchild) || s==h)s--;else{stack[s] = (BiTree)malloc(sizeof(BiNode));stack[s]->date = t[front++];stack[s]->lchild = NULL;stack[s]->rchild = NULL;if(stack[s-1]->lchild==NULL) stack[s-1]->lchild = stack[s];else stack[s-1]->rchild = stack[s];s++;}}return stack[0];
} //求满二叉树的高度
int height(int num){int i;num+=1;for(i=-1;num;i++){num/=2;}return i;
}//递归方法中序遍历二叉树
void Traverse(BiNode *p){if(p==NULL){return;}else{Traverse(p->lchild);Traverse(p->rchild);printf("%c",p->date);}return;
} 

满二叉树先序序列转后序序列相关推荐

  1. C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)

    目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...

  2. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  3. 二叉树(前序遍历序列、中序遍历序列、后序遍历序列、层次遍历序列、深度、叶子数)

    Description 已知二叉树的一个按前序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点).请建立二叉树,并输出建立二叉树的前序遍历序列.中序遍历序列.后序遍历序列.层次遍历序列 ...

  4. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  5. 先序序列和后序序列并不能唯一确定二叉树

    数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树.然后就是根据二叉树的不同遍历序列(先序.中序.后序),重构二叉树. ...

  6. 天梯选拔:先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数

    思路分析: 这道题考察二叉树的建立以及二叉树的前序遍历.中序遍历和后序遍历.首先按照先序建立二叉树.在这期间需要先建立一个结构体,包括当前节点的值,以及它的左儿子和右儿子.注意这里不能直接存左儿子和右 ...

  7. 二叉树(Binary Tree):先序遍历、中序遍历、后序遍历和层次遍历

    二叉树(Binary Tree):先序遍历.中序遍历.后序遍历和层次遍历 树 Tree 二叉树 Binary Tree 先序遍历 Preorder Traversal 中序遍历 Inoreder Tr ...

  8. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  9. 每天一道LeetCode-----根据中序遍历和后序遍历重构二叉树

    Construct Binary Tree from Inorder and Postorder Traversal 原题链接Construct Binary Tree from Inorder an ...

最新文章

  1. c++一些常见的知识点
  2. linux的mount(挂载)命令
  3. SSM框架的搭建(idea)
  4. 互联网与大数据将成为智能制造的基石
  5. Nginx静态资源盗链的效果展示
  6. 西门子安装未找到ssf文件_V5.3安装时显示NO SSF FILE FOUND对话框,我该怎么解决啊? 谢谢!-工业支持中心-西门子中国...
  7. 服务框架HSF分析之一容器启动
  8. 如何使用Wondershare PDFelement制作PDF文件
  9. 【bzoj4200】【NOI2015】【小园丁与老司机】【dp+最小流】
  10. 周易六十四卦——水火既济卦
  11. 网易手游《镇魔曲》怎么打?华为畅享6S帮你春节同学聚会露一手
  12. 安装nginx和zookeeper
  13. AE效果:过时与抠像
  14. 盘点Linux操作系统的十大版本
  15. html 怎么把图片变成圆角,css怎么样实现图片圆角
  16. 异或校验算法 c语言程序,C# 异或校验算法
  17. 深度解析JavaScript原型链
  18. AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE——ViT全文翻译
  19. C++四则运算(带负数小数,不含大数)
  20. 泛在电力物联网技术及战略解读:一个战略 两个领域 三个阶段

热门文章

  1. 项目中遇到 “It is indirectly referenced from required .class files”的问题(开发笔记)
  2. 如何修改数据库名字oracle,Oracle修改数据库名字详细解释
  3. 如何使用 flv.js 做直播
  4. Dataguard基本简介及三大保护模式介绍
  5. 论文阅读笔记|2023 AAAI 多模态论文研读
  6. 被质疑的时候,你会如何?
  7. 一文说清楚企业级业务架构方法
  8. 金融理财直播大热,机构各出奇招
  9. 国内十大精准的现货黄金价格走势图软件最新排名(综合版)
  10. 如何通过Facebook营销引流到博客