// test4.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
struct Node{
Node* pLeft;
Node* pRight;
char chvalue;
};
void Rebuild(char* pPreOrder,char* pInOrder,int nTreeLen,Node** pRoot)
{
if (0>=nTreeLen)
return;
Node* Root=new Node;//新建节点
Root->pLeft=NULL;//初始化
Root->pRight=NULL;
*pRoot=Root;
Root->chvalue=pPreOrder[0];
int i;
for( i=0;i<nTreeLen;i++)//寻找根位置
{
if(pInOrder[i]==pPreOrder[0])
{
break;
}
}
Rebuild(pPreOrder+1,pInOrder,i,&((*pRoot)->pLeft));
Rebuild(pPreOrder+i+1,pInOrder+i+1,nTreeLen-i-1,&((*pRoot)->pRight));
}
void SucOrder(Node* Root)
{
if(Root!=NULL)
{
SucOrder(Root->pLeft);
SucOrder(Root->pRight);
cout<<Root->chvalue;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char* PreOrder="abdcef";
char* InOrder="dbaecf";
Node* Root;
Rebuild(PreOrder,InOrder,6,&Root);
SucOrder(Root);
system("pause");
return 0;
}
《编程之美》重建二叉树
最新推荐文章于 2020-04-12 22:03:53 发布