剑指Offer:面试题6 重建二叉树
2014-09-06 01:07
447 查看
/* 利用前序和中序,求后续遍历结果 输入: 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; }
相关文章推荐
- 剑指Offer面试题:5.重建二叉树
- 《剑指Offer》读书笔记---面试题6:重建二叉树
- 剑指offer 面试题6 重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 剑指offer《面试题6:重建二叉树》
- 剑指Offer面试题6重建二叉树(根据前序中序输出后序)
- 《剑指Offer》面试题六之重建二叉树
- 剑指offer面试题06 重建二叉树
- 剑指offer-面试题6.重建二叉树
- 剑指Offer学习之面试题6 :重建二叉树
- 剑指offer-面试题6 重建二叉树
- 面试题06_重建二叉树——剑指offer系列
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
- 剑指offer面试题6:重建二叉树
- 《剑指Offer》学习笔记--面试题6:重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 剑指Offer-【面试题06:重建二叉树】
- 剑指offer面试题7:重建二叉树 Java代码实现
- 《剑指offer》面试题6 重建二叉树
- 剑指Offer(第二版)面试题7:重建二叉树