重建二叉树
来源:互联网 发布:流动人口定时联系软件 编辑:程序博客网 时间:2024/04/27 14:28
编程之美上面的 重建二叉树 实现代码
#include<stdio.h>#include<malloc.h>#define TREELEN 6struct 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; //NODE *pTemp; //if(!(pTemp = (Node *)malloc(sizeof(Node)))) return; 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++; } //leftchild Tree length int nLeftLen =0; nLeftLen = int(pLeftEnd - pOrgInOrder); //rightchild Tree length int nRightLen =0; nRightLen = nTreeLen - nLeftLen -1; //reCreate leftchild Tree if(nLeftLen >0) { ReBuild(pPreOrder +1, pInOrder, nLeftLen, &((*pRoot)->pLeft)); } //reCreate rightchild Tree if(nRightLen >0) { ReBuild(pPreOrder+nLeftLen +1,pOrgInOrder + nLeftLen +1,nRightLen, &((*pRoot)->pRight)); }}void PostOrder(NODE *pRoot){ if(pRoot) { PostOrder(pRoot->pLeft); PostOrder(pRoot->pRight); printf("%c",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); PostOrder(pRoot); printf("\nok!"); return 0;}
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- android从wedserver上获取数据
- FreeRADIUS RADTEST说明
- java中静态代码块的用法 static用法详解
- 工作流jbpm4的学习笔记2
- 关于错误errno EFAULT:Bad address
- 重建二叉树
- #hive_正则表达式#JAVA的正则表达式案例详解
- java实现树的前序,中序,后序的递归和非递归遍历
- 工作流jbpm4的学习笔记1
- 为 Android private library 指定source和java doc
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
- CentOS 重启时出现 “Give root password for maintenance” 错误的解决办法
- 查找重复的字符串
- c#针对任何数值类型的排序算法