HDU 1710(Binary Tree Traversals)二叉树的遍历
2015-09-02 13:56
267 查看
题目给出序列的先序序列和中序序列,要求你后序遍历二叉树
根据先序序列和后序序列,先序递归构造二叉树,然后后序输出
注意两个数组在寻找过程中的起始位置,这个调试花了一点时间
代码:
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
typedef struct TreeNode
{
struct TreeNode *lchild,*rchild;
int data;
}TreeNode,*BinTree;
int a[1005],b[1005];
int cc,n;
void CreatBinTree(BinTree &T,int s1,int n1,int s2,int n2)
{
int i;
T= new TreeNode;
T->data=a[s1];
for(i=s2;i<n2;i++)
if(a[s1]==b[i]) break;
T->lchild=T->rchild=NULL;
if(i>s2) CreatBinTree(T->lchild,s1+1,s1+i-s2+1,s2,i); //存在左子树
if(i+1<n2 && (s1+i-s2+1)<n1) CreatBinTree(T->rchild,s1+i-s2+1,n1,i+1,n2); //存在右子树
}
void PostOrderBinTree(BinTree T)
{
if(T!=NULL && cc<=n-1)
{
PostOrderBinTree(T->lchild);
PostOrderBinTree(T->rchild);
if(cc>=n-1)
{
cout<<T->data<<endl;
cc++;
}
else
{
cout<<T->data<<" ";
cc++;
}
}
}
int main()
{
int i;
while(cin>>n)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
cin>>b[i];
BinTree T;
CreatBinTree(T,0,n,0,n); //树T,先序位置,总结点数,中序区间
cc=0;
PostOrderBinTree(T);
}
return 0;
}
根据先序序列和后序序列,先序递归构造二叉树,然后后序输出
注意两个数组在寻找过程中的起始位置,这个调试花了一点时间
代码:
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
typedef struct TreeNode
{
struct TreeNode *lchild,*rchild;
int data;
}TreeNode,*BinTree;
int a[1005],b[1005];
int cc,n;
void CreatBinTree(BinTree &T,int s1,int n1,int s2,int n2)
{
int i;
T= new TreeNode;
T->data=a[s1];
for(i=s2;i<n2;i++)
if(a[s1]==b[i]) break;
T->lchild=T->rchild=NULL;
if(i>s2) CreatBinTree(T->lchild,s1+1,s1+i-s2+1,s2,i); //存在左子树
if(i+1<n2 && (s1+i-s2+1)<n1) CreatBinTree(T->rchild,s1+i-s2+1,n1,i+1,n2); //存在右子树
}
void PostOrderBinTree(BinTree T)
{
if(T!=NULL && cc<=n-1)
{
PostOrderBinTree(T->lchild);
PostOrderBinTree(T->rchild);
if(cc>=n-1)
{
cout<<T->data<<endl;
cc++;
}
else
{
cout<<T->data<<" ";
cc++;
}
}
}
int main()
{
int i;
while(cin>>n)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
cin>>b[i];
BinTree T;
CreatBinTree(T,0,n,0,n); //树T,先序位置,总结点数,中序区间
cc=0;
PostOrderBinTree(T);
}
return 0;
}
相关文章推荐
- 【Jason's_ACM_解题报告】Not so Mobile
- 二叉树的基本操作-递归实现
- opencv我的单通道阈值分割
- Android Buledroid (一) 蓝牙简介
- iOS计算缓存文件的大小
- Java面试总结1
- 集成环信:Warning! ivar size mismatch in PSUICollectionView_ - can't change the superclass.解决办法
- 完美解决“The identity used to sign the executable is no longer valid.”问题
- Autoit3 脚本编写举例
- An Overview of RMI Applications
- Java面试总结1
- Attribute 和 Parameter 的区别
- 将TXT批量转换成PDF文本文件的操作
- cocos2d-x 3.0 场景切换特效汇总
- python 汉字编码
- Linux命令之locate、find搜索命令
- Linux Capability
- 对话框程序基础控件的使用
- Easy UI DataGrid 导出Excel表格
- cocos2dx常见49种Action