已知前序和中序遍历恢复二叉树(递归)
来源:互联网 发布:python视频教程 编辑:程序博客网 时间:2024/05/07 07:32
#include<iostream>using namespace std;#define TREELEN 6//数据结构定义struct NODE{NODE* pLeft; //左子树NODE* pRight; //右子树char chValue; //该节点的值};void ReBuild(char* pPreOrder,char* pInOrder,int nTreeLen,NODE** pRoot){//检查边界条件if(pPreOrder==NULL || pInOrder==NULL){return;}//获得前序遍历的第一个节点NODE* pTemp = new NODE;pTemp->chValue = *pPreOrder;pTemp->pLeft = NULL;pTemp->pRight = NULL;//如果节点为空,把当前节点复制到根节点if(*pRoot == NULL){*pRoot = pTemp;}//如果当前树长度为1,那么已经是最后一个节点if(nTreeLen == 1){return;}//寻找子树长度char* pOrgInOrder = pInOrder;char* pLeftEnd = pInOrder; int nTempLen = 0;//找到左子树的结尾while(*pPreOrder != *pLeftEnd){if(pPreOrder==NULL || pLeftEnd==NULL){return;}nTempLen++;//记录临时长度,以免溢出if(nTempLen > nTreeLen){break;}pLeftEnd++;}//寻找左子树长度int nLeftLen = 0;nLeftLen = (int)(pLeftEnd-pOrgInOrder);//寻找右子树长度int nRightLen = 0;nRightLen = nTreeLen - nLeftLen - 1;//重建左子树if(nLeftLen > 0){ReBuild(pPreOrder+1,pInOrder,nLeftLen,&((*pRoot)->pLeft));}//重建右子树if(nRightLen > 0){ReBuild(pPreOrder+nLeftLen+1,pInOrder+nLeftLen+1,nRightLen,&((*pRoot)->pRight));}}//前序遍历结果void PrePrint(NODE* pRoot){if(pRoot == NULL){return;}cout<<pRoot->chValue<<" ";PrePrint(pRoot->pLeft);PrePrint(pRoot->pRight);}//中序遍历结果void InPrint(NODE* pRoot){if(pRoot == NULL){return;}InPrint(pRoot->pLeft);cout<<pRoot->chValue<<" ";InPrint(pRoot->pRight);}void main(){char szPreOrder[TREELEN] = {'a','b','d','c','e','f'};char szInOrder[TREELEN] = {'d','b','a','e','c','f'};NODE* pRoot = NULL;ReBuild(szPreOrder,szInOrder,TREELEN,&pRoot);PrePrint(pRoot);cout<<endl<<endl;;InPrint(pRoot);cout<<endl;}/*a b d c e fd b a e c f*/
- 已知前序和中序遍历恢复二叉树(递归)
- 已知前序和中序遍历恢复二叉树
- 二叉树遍历,已知前序遍历与中序遍历,求后续遍历 使用java(递归方式)实现
- 二叉树遍历:已知前序和中序,求后序
- 已知二叉树的前序遍历和中序遍历求后序遍历(二叉树)
- 二叉树系列:已知二叉树的中序遍历和前序遍历,求后序遍历
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 二叉树之已知前序和中序遍历求后序遍历(POJ &&HDU )
- 二叉树遍历(已知中序和按层遍历求先序 递归)
- 二叉树遍历---已知前序遍历和中序遍历求其后序
- 二叉树--已知前序遍历和中序遍历,输出后续遍历
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知二叉树的前序遍历和中序遍历求后序遍历
- 二叉树已知前序遍历和中序遍历,编程求后序遍历。
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 3.14(c程序实现)已知二叉树的前序遍历和中序遍历,求后序遍历
- 二叉树——已知前(后)序遍历和中序遍历,求解树
- Android中全屏或者取消标题栏
- 设计模式(九)---组合模式
- spring ioc原理(看完后大家可以自己写一个spring)
- UNIX环境高级编程——线程限制
- PIL Ubuntu12.4
- 已知前序和中序遍历恢复二叉树(递归)
- VC学习之一
- IOS之Objective-C 的“多继承”
- Android 监听网络状态
- 泛型(Generic)
- JackSon学习笔记(二)
- Android中的“再按一次返回键退出程序”实现
- UNIX环境高级编程——线程属性
- Secure CRT 自动记录日志 配置 小记