剑指Offer:面试题6 重建二叉树
来源:互联网 发布:米6相机清除数据 编辑:程序博客网 时间:2024/06/10 02:09
/*利用前序和中序,求后续遍历结果输入:FDXEAG(前序)XDE F AG(中序):例如找到F=3(i),则前序的左子树遍历范围是:s1+1到s1+3(i),右子树遍历范围是:s1+3(i)+1到e1输出:XEDGAF(后序)*/#include <stdio.h>#include <string.h>const int MAXSIZE = 100000;typedef struct Node{char _iVal;struct Node* _leftNode;struct Node* _rightNode;}Node;Node nodeArr[MAXSIZE];int _iIndex;//用于创建节点时计数Node* createNode(){++_iIndex;nodeArr[_iIndex]._leftNode = nodeArr[_iIndex]._rightNode = NULL;return &nodeArr[_iIndex];}Node* rebuildTree(char* sFront,char* sMid,int s1,int e1,int s2,int e2)//且注意,这里的e1是实际数组的长度-1(即抠除了结尾符){Node* root = createNode();root->_iVal = sFront[s1];//寻找根节点在中序中的位置int iRootIndex;for(int i = s2 ; i <= e2; i++){if(sMid[i] == root->_iVal){iRootIndex = i;break;}}//对左子树进行判空if(iRootIndex != s2)//说明左子树没有空{root->_leftNode = rebuildTree(sFront,sMid,s1+1,s1 + iRootIndex - s2,s2,iRootIndex -1);//对根节点的左孩子进行赋值}if(iRootIndex != e2)//右子树不空{root->_rightNode = rebuildTree(sFront,sMid,s1 + iRootIndex - s2 + 1,e1,iRootIndex + 1,e2);}return root;}void backOrder(Node* root)//注意这里采用递归{if(root->_leftNode){//root = root->_leftNode;//是递归不是赋值backOrder(root->_leftNode);}if(root->_rightNode){//root = root->_rightNode;backOrder(root->_rightNode);}printf("%c",root->_iVal);}void process(){char strFront[MAXSIZE];char strMid[MAXSIZE];while(EOF != scanf("%s %s",strFront,strMid)){_iIndex = -1;Node* root = rebuildTree(strFront,strMid,0,strlen(strFront)-1,0,strlen(strMid)-1);backOrder(root);printf("\n");}}int main(int argc,char* argv[]){process();getchar();return 0;}
0 0
- 《剑指Offer》面试题-重建二叉树
- 剑指offer--面试题6: 重建二叉树(树)
- 剑指offer-->面试题6 重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 剑指offer 面试题6 重建二叉树
- 剑指Offer:面试题6 重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 《剑指offer》面试题6重建二叉树
- 剑指offer面试题6--重建二叉树
- 理解《剑指Offer》之面试题6 重建二叉树
- 剑指offer 面试题6 重建二叉树
- 剑指offer面试题6 重建二叉树(c)
- 剑指offer面试题6 重建二叉树(java)
- 《剑指Offer》面试题6:重建二叉树
- 剑指offer--面试题6:重建二叉树--Java实现
- 【剑指Offer学习】【面试题6 :重建二叉树】
- 《剑指Offer》学习笔记--面试题6:重建二叉树
- nyoj767因子和
- 在ubuntn下破解Navicat Premium,无限次使用,保留原有的视图sql文件
- 在ubuntu下将virtualbox虚拟机的磁盘重设大小的方法
- 静态类型推导
- Ubuntu 13.04下配置Eclipse的Xdebug调试工具+火狐浏览器的easy Xdebug组件结合
- 剑指Offer:面试题6 重建二叉树
- MongoDB安装教程
- Java中使用多线程、curl及代理IP模拟post提交和get访问
- PHP学习第N天:用PHPExcel将Excel转化为数组输出
- 剑指Offer:面试题7 用两个栈实现队列
- 剑指Offer:面试题8 :旋转数组的最小数字
- Error 403: Forbidden 错误网站禁止爬虫
- 剑指Offer:面试题9 斐波那契数列
- 剑指Offer:面试题10 二进制中1的个数