已知一颗二叉树S的前序遍历和中序遍历序列,请编程输出二叉树S的后续遍历序列。
2017-03-03 20:56
344 查看
举例:pred[]/先序:A、B、D、E、C、F、G;
inod[]/中序:D、B、E、A、C、G、F;
后序遍历序列是:D、E、B、G、F、C、A
代码如下:
延伸可得到,根据二叉树S的前序遍历和中序遍历序列建立唯一的二叉树,代码如下:
inod[]/中序:D、B、E、A、C、G、F;
后序遍历序列是:D、E、B、G、F、C、A
代码如下:
#include<iostream> #include<cstring> using namespace std; void pre_in_showtree(char pre[], char in[], int pre_s, int pre_e, int in_s, int in_e) { if(pre_s <= pre_e) { int k; //找到先序序列最低位在中序序列中的位置 for(k=in_s; k<=in_e; ++k) if(pre[pre_s] == in[k]) break; //分治为先序序列和中序序列的左子树。 pre_in_showtree(pre, in, pre_s+1, pre_s+k-in_s, in_s, k-1); //分治为先序序列和中序序列的右子树。 pre_in_showtree(pre, in, pre_s+k-in_s+1, pre_e, k+1, in_e); //输出后序的结点 cout<<in[k]<<" "; } } int main() { char pre[] = "ABDECFG"; char in[] = "DBEACGF"; pre_in_showtree(pre, in, 0, strlen(pre)-1, 0, strlen(in)-1); return 0; }
延伸可得到,根据二叉树S的前序遍历和中序遍历序列建立唯一的二叉树,代码如下:
#include<iostream> #include<cstring> using namespace std; typedef struct BTNode { char c; struct BTNode *lchild; struct BTNode *rchild; }BTNode; BTNode* create_tree(char *pre, char *in, int pre_l, int pre_h, int in_l, int in_h) { if(pre_l > pre_h) return NULL; else { BTNode *root = (BTNode*)malloc(sizeof(BTNode)); root->c = pre[pre_l]; int k; for(k=in_l; k<=in_h; ++k) if(pre[pre_l] == in[k]) break; root->lchild = create_tree(pre, in, pre_l+1, pre_l+k-in_l, in_l, k-1); root->rchild = create_tree(pre, in, pre_l+k-in_l+1, pre_h, k+1, in_h); return root; } } //后序遍历 void show_tree_post(BTNode *root) { if(root != NULL) { show_tree_post(root->lchild); show_tree_post(root->rchild); printf("%c ", root->c); } } void main() { char pre[] = "ABDECFG"; char in[] = "DBEACGF"; BTNode *root = create_tree(pre, in, 0, strlen(pre)-1, 0, strlen(in)-1); show_tree_post(root); }
相关文章推荐
- 已知一颗二叉树S的前序遍历和中序遍历 序列,请编程输出二叉树S的后续遍历序列.
- 二叉树--已知前序遍历和中序遍历,输出后续遍历
- 二叉树--已知前序遍历和中序遍历,输出后续遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 二叉树已知前序遍历和中序遍历,编程求后序遍历。
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历和中序遍历序列,输出后序遍历序列
- 已知前序遍历序列和中序遍历序列,求二叉树的后序遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 给定先序和后续,构造出一颗二叉树并输出中序序列
- 已知二叉树先序、中序(中序、后序)遍历序列,输出后序(先序)遍历序列
- 已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历?
- 已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历
- 给定二叉树的先序遍历和中序遍历,输出它的后序遍历序列
- 根据二叉树的前序遍历序列和中序遍历序列求二叉树的后序遍历序列
- 根据二叉树的中序遍序列和后续遍历序列还原一颗二叉树
- 先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 学习笔记——已知二叉树的先序中序求后序、中序后序求先序的遍历序列