题目1078:二叉树遍历
来源:互联网 发布:开淘宝店需要进货吗 编辑:程序博客网 时间:2024/05/16 15:10
// 简单的二叉树遍历
#include<stdio.h>
#include<string.h>struct Node{ // 树结点指针
Node *lchild; // 左儿子指针
Node *rchild; // 右儿子指针
char c; // 结点字符信息
}Tree[50]; // 静态内存分配数组
int loc; // 静态数组中已存在的结点数
Node *creat(){
Tree[loc].lchild=Tree[loc].rchild=NULL; // 初始化左右儿子为空
return &Tree[loc++]; // 返回指针,且loc累加
}
char str1[30],str2[30]; // 保存前中遍历结果字符串
void postOrder(Node *T){ // 后序遍历
if(T->lchild!=NULL) postOrder(T->lchild); //若左子树不为空,遍历其左子树
if(T->rchild!=NULL) postOrder(T->rchild); //若右子树不为空,遍历其右子树
printf("%c",T->c); // 遍历该结点,输出其字符信息
}
Node *build(int s1,int e1,int s2,int e2){
// 由字符串的前中遍历还原树,并返回其根结点,
// 其中前序遍历结果为由str1[s1]到str1[e2],
// 中序遍历结果为str2[s2]到str2[e2]
Node* ret=creat(); // 为该树根节点申请空间
ret->c=str1[s1]; // 该节点字符为前序遍历中第一个字符
int rootIdx;
for(int i=s2;i<=e2;i++){ // 查找该根结点字符在中序遍历中的位置
if(str2[i]==str1[s1]){
rootIdx=i;
break;
}
}
if(rootIdx!=s2){ // 若左子树不为空
ret->lchild=build(s1+1,s1+(rootIdx-s2),s2,rootIdx-1);
// 递归还原其左子树
}
if(rootIdx!=e2){ // 若右子树不为空
ret->rchild=build(s1+(rootIdx-s2)+1,e1,rootIdx+1,e2);
} // 递归还原其右子树
return ret; // 返回根结点指针
}
int main()
{
while(scanf("%s",str1)!=EOF){
scanf("%s",str2);
loc=0; // 初始化静态内存空间中已经使用结点个数为0
int L1=strlen(str1);
int L2=strlen(str2); // 计算两个字符串的长度
Node *T=build(0,L1-1,0,L2-1); // 还原整棵树,其根结点保存在T中
postOrder(T); // 后序遍历
printf("\n");
}
return 0;
}
0 0
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- 题目1078:二叉树遍历
- (题目32)题目1078:二叉树遍历
- Jobdu 题目1078:二叉树遍历
- 32-题目1078:二叉树遍历
- 题目32:二叉树遍历
- First Missing Positive(在数组中找到第一个丢失的正整数)
- 安装office 2010,提示需要安装MSXML版本6.10.1129.0组件的解决办法
- PAT (Advanced Level) Practise 1031. Hello World for U (20)
- 小数点和有效位数的问题
- MediaStore获得系统相册列表
- 题目1078:二叉树遍历
- JDBC第二讲:重要接口和事务讲解
- Sicily 1608
- CareerCup Match Problems
- 在Mac OS 上安装 Gearman及PHP的扩展
- andorid,广播接收者,拦截广播。拦截短信
- java面试题大整理
- JVM 内存结构
- Ubuntu下LAMP_服务器安装配置(Linux+Apache+Mysql+Perl/PHP/Python)