博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重建二叉树
阅读量:6870 次
发布时间:2019-06-26

本文共 1356 字,大约阅读时间需要 4 分钟。

#include<iostream> #define TREELEN  6 using namespace std;

struct Node {     char chValue; Node* pLeft; Node* pRight; };

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;   }   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 LastOrder(Node* pRoot) //后根遍历二叉树 {     if(pRoot==NULL)return; LastOrder(pRoot->pLeft); LastOrder(pRoot->pRight); cout<<pRoot->chValue<<" "; } int 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); LastOrder(pRoot); cout<<endl; system("pause"); return 0; }

转载于:https://www.cnblogs.com/bjetsec/archive/2012/11/24/2786092.html

你可能感兴趣的文章
内部类概述
查看>>
linux ln 命令使用参数详解(ln -s 软链接)
查看>>
结队开发项目—NABC模型
查看>>
qt5.4解决输出中文乱码问题
查看>>
深入分析Java ClassLoader原理
查看>>
Vim编辑器
查看>>
Codevs 3304 水果姐逛水果街Ⅰ 线段树
查看>>
linux共享windows资料
查看>>
前端UI框架总结
查看>>
( component 标签元素,及其 :is 属性 )的使用样例(组件切换的一个简单样例,不过,最好使用动画来实现组件的切换)...
查看>>
这7个人生捷径,一定不要走!
查看>>
Koa2+Mysql搭建简易博客
查看>>
Atom 初识
查看>>
Servlet、Filter和Listener
查看>>
高中数学运算能力训练题【基础中阶高阶辅导】
查看>>
Bean的装配方式
查看>>
get_browser()用法
查看>>
期中考试
查看>>
windows下的vim安装使用
查看>>
HTML内容总结
查看>>