二叉树遍历
来源:互联网 发布:手游推荐 知乎 编辑:程序博客网 时间:2024/06/15 11:55
二叉树遍历
题目描述:
二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。
输入:
两个字符串,其长度n均小于等于26。第一行为前序遍历,第二行为中序遍历。二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。
输出:
输入样例可能有多组,对于每组测试样例,输出一行,为后序遍历的字符串。
样例输入:
ABCBACFDXEAGXDEFAG
样例输出:
BCAXEDGAF
code
#include<iostream>#include<cstring>#include<cstdio>using namespace std;//定义树struct Node{ Node *lchild; Node *rchild; char c; //节点字符信息} Tree[50];int loc;//申请节点空间Node *creat(){ Tree[loc].lchild = Tree[loc].rchild = NULL; return &Tree[loc++];}//前序、中序遍历结果字符串char str1[30], str2[30];//后序遍历void postOrder(Node *T){ if (T->lchild != NULL) postOrder(T->lchild); if (T->rchild != NULL) postOrder(T->rchild); cout << T->c;}//还原树Node* build(int s1, int e1, int s2, int e2){ Node* ret = creat(); ret->c = str1[s1]; int rootldx; //查找根节点字符在中序遍历中的位置 for (int i = s2; i <= e2; i++) { if (str2[i]==str1[s1]) { rootldx = i; break; } } //左子树不空 if (rootldx != s2) ret->lchild = build(s1 + 1, s1 + (rootldx - s2), s2, rootldx - 1); //右子树不空 if (rootldx != e2) ret->rchild = build(s1 + (rootldx - s2) + 1, e1, rootldx + 1, e2); return ret;}int main(){ while (scanf("%s", str1) != EOF) { scanf("%s", str2); loc = 0; int s1 = strlen(str1); int s2 = strlen(str2); //还原树 Node* T = build(0, s1 - 1, 0, s2 - 1); postOrder(T); cout << endl; }}
0 0
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- iOS开发UI篇—UIWindow简单介绍
- 聊天页面分页加载逻辑
- 浅谈dojox中的一些小工具
- NGUI 背包系统加强版 背包切换、格子动态生成、总计。
- linux oss编程 mixer 改进
- 二叉树遍历
- iterm2 官方使用说明翻译
- jquery.cookie用法详细解析
- Activemq 预取指令的配置
- java基础——流程控制语句
- C语言指针
- 各个版本android开发环境下载
- C#数组的合并拆分
- Oracle 的 Sql*Plus 常用命令介绍