重建二叉树并非递归前序/中序/后序遍历
来源:互联网 发布:淘宝买机票怎么取票 编辑:程序博客网 时间:2024/05/21 01:46
《编程之美》3.9重建二叉树的题目:根据中序遍历和前序遍历结果重建二叉树
#include <iostream>#include <cassert>#include <algorithm>#include <stack>using namespace std ; struct NODE {NODE *pLeft;NODE *pRight;char chValue;};void Rebuild(char *preOrder, char *inOrder, int nTreeLen, NODE **pRoot){if(preOrder==NULL&&inOrder==NULL){*pRoot = NULL;return;}if (nTreeLen == 0){return;}if (*pRoot==NULL){*pRoot = new NODE;assert(*pRoot!=NULL);(*pRoot)->pLeft=NULL;(*pRoot)->pRight = NULL;(*pRoot)->chValue = *preOrder;}if (nTreeLen==1){return;}char *preTmp = preOrder;char *inTmp = inOrder;int count=0;while(*inTmp!=*preTmp && count<nTreeLen){if (inTmp==NULL)//这个地方要注意判断一下,不过如果假定输入串没有错误的话,这里一般不会出问题。{return;}inTmp++;count++;}Rebuild(preOrder+1,inOrder,count,&((*pRoot)->pLeft));Rebuild(preOrder+count+1,inOrder+count+1,nTreeLen-count-1,&((*pRoot)->pRight));}void PreOrderTraversalNonrecursive(NODE *proot){stack<NODE*> tStack;if (proot==NULL){return;}tStack.push(proot);while(!tStack.empty()){NODE *pnode = tStack.top();cout << pnode->chValue << " ";tStack.pop();if (pnode->pRight!=NULL){tStack.push(pnode->pRight);}if (pnode->pLeft!=NULL){tStack.push(pnode->pLeft);}}cout << endl;}void InOrderTraversalNonrecursive(NODE *proot){if (proot==NULL){return;}stack<NODE *> tstack;NODE *pnode = proot;while(!tstack.empty() || pnode!=NULL){if (pnode!=NULL){tstack.push(pnode);pnode=pnode->pLeft;}else{pnode = tstack.top();cout << pnode->chValue << " ";tstack.pop();pnode = pnode->pRight;}}cout << endl;}void PostOrderTraversalNonrecursive(NODE *proot){if (proot==NULL){return;}stack<NODE*> s1, s2;NODE* pnode = proot;s1.push(pnode);while(!s1.empty()){pnode = s1.top();s1.pop();if (pnode->pLeft!=NULL){s1.push(pnode->pLeft);}if (pnode->pRight!=NULL){s1.push(pnode->pRight);}s2.push(pnode);}while(!s2.empty()){pnode = s2.top();cout<<pnode->chValue<<" ";s2.pop();}cout<<endl;}int main(){char *preStr= "abdcef";char *inStr = "dbaecf";NODE *pRoot = NULL;Rebuild(preStr,inStr,6,&pRoot);PreOrderTraversalNonrecursive(pRoot);InOrderTraversalNonrecursive(pRoot);PostOrderTraversalNonrecursive(pRoot);system("pause");return 0;}
- 重建二叉树并非递归前序/中序/后序遍历
- 前序和中序重建二叉树, 树的前序递归,中序递归,后序递归遍历和前序非递归,中序非递归,后序非递归遍历
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 输入前序/后序+中序 遍历结果重建二叉树(递归)
- 根据前序遍历和中序遍历结果重建二叉树(递归方法)
- 前序,中序,后序递归遍历二叉树
- 二叉树非递归前、中、后序遍历
- 二叉树非递归前、中、后序遍历实现
- 二叉树的非递归【前/中/后 序遍历】
- 非递归前,中,后序遍历二叉树
- 根据前序遍历、中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- [面试] 根据前序和中序重建二叉树,并且中序非递归遍历
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 前、中、后、序递归遍历二叉树以及非递归遍历
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- android4.1.1系统编译全过程
- Oracle基于用户管理的不完全恢复
- 几道黑书上的简单DP题
- 开发中经常遇到不同浏览器的编码乱码问题
- Android自定义属性,attr format取值类型
- 重建二叉树并非递归前序/中序/后序遍历
- SQLServer数据类型与C#类型对照表
- 由结构体设计想到的
- c++中的一些类型转换 : CString,string,int ,long,double,char*,const char*,date等 .
- 嵌入式系统软件结构分析与资源分配
- 【云计算之虚拟化】常见术语和概念
- JNI入门
- oracle:SID匹配错误
- ZOJ 1763 A Simple Question of Chemistry