您的位置:首页 > 其它

3.9重建二叉树

2014-09-10 17:21 337 查看
#include <iostream>
using namespace std;

struct Node
{
Node() : lchild(0), rchild(0){

}
Node(char v):val(v), lchild(0), rchild(0){

}
char val;
Node *lchild, *rchild;
};

void Rebuild(char *pPreOrder, char * pInOder, int len, Node **pRoot)
{
if(!pPreOrder || !pInOder)
return;
if((*pRoot) == NULL && len >= 1)
{
*pRoot = new Node(*pPreOrder);
}
if(len <= 1)
return;
char *s = pInOder, *e = pInOder + len - 1;
while(s <= e)
{
if(*s == *pPreOrder)
break;
s++;
}
if(s <= e)
{
Rebuild(pPreOrder+1, pInOder, s - pInOder, &((*pRoot)->lchild));
Rebuild(pPreOrder + (s - pInOder) + 1, s+1, e - s, &((*pRoot)->rchild));
}
}

void print(Node *root)
{
if(!root)
return;
cout << root->val << " ";
print(root->lchild);
print(root->rchild);
}

int main(void)
{
char pPreOder[] = "abdcef";
char pInOder[] = "dbaecf";
int len = strlen(pInOder);
Node *root = NULL;
Rebuild(pPreOder, pInOder, len, &root);
print(root);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: