重建二叉树与二叉树的层次遍历

数据结构实验之求二叉树后序遍历和层次遍历

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描写叙述

已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。

输入

输入数据有多组,第一行是一个整数t (t<1000)。代表有t组測试数据。每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。

输出

每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列

演示样例输入

2
abdegcf
dbgeafc
xnliu
lnixu

演示样例输出

dgebfca
abcdefg
linux
xnuli
 
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef struct node
{
	char data;
	node *lch,*rch;
}btree,*bt;
char pre[55],ins[55];
void build(bt &T,char *pre,char *ins,int n) //依据先序和中序重建二叉树
{
	if(n<=0) T=NULL;
	else
	{
		int k=strchr(ins,pre[0])-ins;
		T=new btree;
		T->data=pre[0];
		build(T->lch,pre+1,ins,k);
		build(T->rch,pre+k+1,ins+k+1,n-k-1);
	}
}
void last(bt T)//后序遍历
{
	if(T)
	{
		last(T->lch);
		last(T->rch);
		cout<<T->data;

	}
}
void level(bt T) //层次遍历(BFS)
{
	queue <btree> Q;
	Q.push(*T);
	while(!Q.empty())
	{
		btree next=Q.front();
		Q.pop();
		cout<<next.data;
		if(next.lch) Q.push(*(next.lch));
		if(next.rch) Q.push(*(next.rch));
	}
}
int main()
{
	bt root;
	int n;
	cin>>n;
	getchar();
	while(n--)
	{
		cin>>pre>>ins;
		build(root,pre,ins,strlen(pre));
		last(root);
		cout<<endl;
		level(root);
		cout<<endl;
	}
	return 0;
}

时间: 2024-10-22 03:24:52

重建二叉树与二叉树的层次遍历的相关文章

lintcode 二叉树的锯齿形层次遍历 (双端队列)

题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 返回其锯齿形的层次遍历为: [ [3], [20,9], [15,7] ] 思路: 我们用双端队列模拟一下这个过程

LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). LeetCode103. Binary Tree Zigzag Level Order Traversal中等 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回锯齿形层次遍历如下: [

LeetCode 103 二叉树的锯齿形层次遍历 以及 LinkedList

LeetCode103 二叉树的锯齿形层次遍历: 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]] import java.util.List; import java.util.ArrayList; import java.util.LinkedList;

leetcode 103. 二叉树的锯齿形层次遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] 1 class Solution { 2 public: 3 vector<vector<int>> zigzagLevelOrder(TreeNode* root) { 4 stack&l

uva122 二叉树的实现和层次遍历(bfs)

题目见紫书 6.3.2 二叉树的层次遍历 1.二叉树的实现: a.用指针实现:用结构体记录结点,利用指针访问结点 其中变量left,right的值 new的返回值都是地址 /*二叉树的结点定义和操作*/ //结点类型 struct Node{ bool have_value; //是否被赋值过 int v; //结点值 Node *left,*right; Node():v(-1),have_value(false),left(NULL),right(NULL){}//构造函数 }; Node*

LeetCode 第103题 二叉树的锯齿形层次遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] 思路: 与层次遍历类似,可以直接将特定层次的结果倒置 1 class Solution103 { 2 3 public List<List<Integer>> zigzagLevelOrde

【python-leetcode103-树的宽度遍历】二叉树的锯齿形层次遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20    / \  15 7返回锯齿形层次遍历如下: [ [3], [20,9], [15,7]] 代码: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val =

第五章&#160;二叉树(e4)层次遍历

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10258543.html

前序+中序 = 二叉树(先序、中序、后序、层次遍历)

内心OS:我靠啊!!!我就是偷了一下懒!!!把先序遍历的代码COPY了两份,改成了中序和后序遍历.万万没想到啊!我忘了修改函数中递归函数的名字!!!找这个BUG花了我三个小时~~我哭啊~~,我还以为我的知识体系坍塌了呢?!!~ 总结,这是一道模板题,要先记住大体流程,然后反复练习. 输入格式: 第一行给出结点个数 N(1<=N<= 50) 第二行给出先序序列,共N个整数 第三行给出后序序列,共N个整数 输出格式: 第一行给出先序遍历结果: 第二行给出中序遍历结果: 第三行给出后续遍历结果: 第