已知先序遍历和中序遍历求后序遍历——二叉树
来源:互联网 发布:软件测试有前途吗天涯 编辑:程序博客网 时间:2024/06/06 02:07
思想数据结构课都讲过,就是从pre下手,因为处理pre是连续的一段段,头上的都是根节点,所以接口函数为:
void solve(tree* root,int low,int high,int rootpos)
root为当前节点,low,high都是相对于mid串而言的;rootpos为根节点在pre串中的位置
思路递归,代码如下:
- #include "iostream"
- #include "string"
- using namespace std;
- struct tree
- {
- char name;
- tree* left;
- tree* right;
- };
- string pre,mid;
- //tree* solve(tree* root,int low,int high,int rootpos)
- //{
- // if (low>high)
- // return NULL;
- // if(low==high)
- // {
- // tree *temp=(tree*) malloc(sizeof(tree*));
- // temp->left=temp->right=NULL;
- // temp->name=mid[low];
- // return temp;
- // }
- // int rpos=-1;
- // while (mid[++rpos]!=pre[rootpos]);
- // root->name=pre[rootpos];
- // root->left=(tree*) malloc(sizeof(tree*));
- // root->right=(tree*) malloc(sizeof(tree*));
- // root->left=solve(root->left,low,rpos-1,rootpos+1);
- // root->right=solve(root->right,rpos+1,high,rpos+1);
- // return root;
- //}
- void solve(tree* root,int low,int high,int rootpos)
- {
- if(low==high)
- {
- root->left=root->right=NULL;
- root->name=mid[low];
- return;
- }
- int rpos=-1;
- while (mid[++rpos]!=pre[rootpos]);
- root->name=pre[rootpos];
- root->left=root->right=NULL;
- if (low<=rpos-1)
- {
- root->left=(tree*) malloc(sizeof(tree*));
- solve(root->left,low,rpos-1,rootpos+1);
- }
- if(rpos+1<=high)
- {
- root->right=(tree*) malloc(sizeof(tree*));
- solve(root->right,rpos+1,high,rpos+1);
- }
- }
- void TraversalPost(tree* node)
- {
- if (node)
- {
- TraversalPost(node->left);
- TraversalPost(node->right);
- printf("%c ",node->name);
- }
- }
- void main()
- {
- int i,j;
- tree* root=(tree*)malloc(sizeof(tree*));
- while (cin>>pre>>mid)
- {
- root->left=root->right=NULL;
- root->name=mid[0];
- solve(root,0,mid.length()-1,0);
- TraversalPost(root);
- cout<<endl;
- }
- }
其中被注释掉的那部分也能用的,和下面同名函数是同种方法,两种形式。
调用就是root=solve(root,0,mid,length()-1,0);
=======================================================================
Hope you enjoy it !
0 0
- 已知先序遍历和中序遍历求后序遍历——二叉树
- 已知先序遍历和中序遍历求后序遍历——二叉树
- 六、树和二叉树--(3)已知先序遍历和中序遍历求后序遍历
- 已知二叉树的先序遍历和中序遍历,如何求后序遍历
- java实现二叉树已知先序遍历和中序遍历求后序遍历
- 已知二叉树的先序和中序遍历,求后序遍历及二叉树
- 已知先序遍历和中序遍历求后序遍历
- 已知先序遍历和中续遍历求后序遍历
- 二叉树已知先序遍历和中序遍历得到后序遍历
- 已知先序遍历和中序遍历,求后序遍历 && 求二叉树中节点的最大距离
- 二叉树系列(一):已知先序遍历序列和中序遍历序列,求后序遍历序列
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 建立二叉树(已知中序遍历和先序遍历)
- 已知中序遍历和先序遍历重建二叉树
- 已知先序遍历和中序遍历求解二叉树
- 已知先序遍历和中序遍历构建二叉树
- hihocoder #1049 : 后序遍历 (已知先序遍历和中序遍历求后序遍历)
- JOB JOB JOB——优先队列 + 贪心
- C++课后习题作业
- 【我就看看不说话】socket 即使通讯
- Altium Dwsigner
- 快速入手ITOO导入-客户端
- 已知先序遍历和中序遍历求后序遍历——二叉树
- LogicRobot(0)
- Android源码下载及开发环境的搭建
- 如何在javascript中获取dom对象
- linux C++ 多线程编程
- 开发者账号申请+邓白氏号申请(免费)
- 5.1
- MySql 常用命令总结
- 自定义结构--一般树形结构