二叉树(知道中序遍历和后序遍历得到先序遍历)
二叉树遍历详细
给定一棵二叉树的后序遍历和中序遍历,请你输出其先序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的先序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
6 4 2 5 1 6 3 4 5 2 3 1 6
输出样例:
3 5 4 2 1 6
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int per[N],in[N],post[N];
int k;
//定义二叉树
struct node{int val;node *l;node *r;node(int val):val(val),l(NULL),r(NULL){}
};
//建树
void build(int l,int r,int &t,node *&root){////if(t==0) return ;或者下边写if(flag==-1) return ;都可以 int flag=-1;for(int i=l;i<=r;i++)if(in[i]==post[t]){flag=i;break;}//if(flag==-1) return ;root=new node(in[flag]);t--;
/
///这两句的顺序 if(flag<r) build(flag+1,r,t,root->r);if(flag>l) build(l,flag-1,t,root->l);
}
//前序遍历
void qian(node*root){if(root!=NULL){per[k++]=root->val;qian(root->l);qian(root->r);}
}
void refree(node*root){if(root==NULL) return ;refree(root->l);refree(root->r);delete root;
}
int main(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>post[i];for(int i=1;i<=n;i++) cin>>in[i];node *root;int t=n;build(1,n,t,root);k=0;qian(root);for(int i=0;i<k;i++){cout<<per[i];if(i!=k-1) cout<<" ";}refree(root);return 0;
}
二叉树(知道中序遍历和后序遍历得到先序遍历)相关推荐
- LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
- 二叉树的前序遍历,中序遍历,后序遍历学习 (原)
经验: 不要死记各个遍历节点的位置,将一个复杂的二叉树当作一个个小的二叉树学习前序遍历,中序遍历,后序遍历会更容易理解 转载于:https://www.cnblogs.com/gyrgyr/p/962 ...
- 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法
二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...
- 二叉树 —— 创建二叉树 先序遍历 、中序遍历、后序遍历(递归方式、非递归方式)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef char DataType; #de ...
- 数据结构34:二叉树前序遍历、中序遍历和后序遍历
链式存储结构存储的二叉树,对树中结点进行逐个遍历时,由于是非线性结构,需要找到一种合适的方式遍历树中的每个结点. 递归思想遍历二叉树 之前讲过,树是由根结点和子树部分构建的,对于每一棵树来说,都可以分 ...
- 【练习】树(Tree, UVa 548)给一棵点带权(权值各不相同)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小。
给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍历,找一个叶子使得它到根的路径上的权和最小.如果有多解,该叶子本身的权应尽量小.输入中每两行表示一棵树,其中第一行为中序遍 ...
- 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历
数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...
- C实现二叉树的先序遍历,中序遍历,后序遍历
1 要创建的二叉树图 2 输出结果图 : 3 完整代码如下: #include<stdio.h> #include<malloc.h>//定义二叉树 typedef stru ...
- 阿里笔试-二叉树由前序遍历和中序遍历推导后序遍历
题目描述 已知一个二叉树的前序遍历结果是(ACDEFHGB) ,中序遍历结果是(DECAHFBG),请问后续遍历结果是(). 思路 由前序遍历的第一个节点A是根节点,把中序遍历分为(DEC)A(HFB ...
最新文章
- Master PDF Editor中文版
- 吹爆了这个可视化神器,上手后直接开大~
- 超速问题的c语言编程,超速行驶问题--精选.doc
- “入乡随俗,服务为主” 发明者量化兼容麦语言啦!
- facebook.com_如何降低电子商务的Facebook CPM
- android iOS 都精通,Android IOS开发要理解何为面向对象的思维
- 转 :原码,反码,补码
- 微软这次开源的是 Windows 计算器
- 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
- 1.MongoDB入门详解
- 机器学习 结构化数据_聊天机器人:根据结构化数据创建自然语言
- 什么是AsHelper
- 如何在typescript-react项目中使用emotion的css行内样式
- html5 黑色圆圈,html5使用canvas画空心圆与实心圆_html5教程技巧
- vue2支付宝网页授权登录
- 《人机交互技术》第四章 人机交互技术概述
- 200行Python实现的qq连连看辅助,用于学习,请不要拿去伤害玩家
- 激光投影仪和大屏液晶电视有哪些优缺点?二者应该怎么选?
- sudo: no valid sudoers sources found,quitting
- 测试手机的价格的软件,给大家推荐一个测心率的手机软件,不用花昂贵的价钱买设备啦~ - 薄荷减肥论坛...