博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

重建二叉树(编程之美3.9)

Posted on 2010-09-22 22:23  KurtWang  阅读(300)  评论(0)    收藏  举报
#include "stdafx.h"
#include <assert.h>

struct Node
{
	Node * left;
	Node * right;
	char value;
};

void Rebuild(char * pPreOrder, char * pInOrder, int nTreeLen, Node ** root)
{
	assert(pPreOrder);
	assert(pInOrder);
	if(*root == NULL)
	{
		*root = new Node();
		(*root)->left = NULL;
		(*root)->right = NULL;
		(*root)->value = *pPreOrder;
	}

	if(nTreeLen == 1)
		return;

	char * pOrgInOrder = pInOrder;
	int nLeftLen = 0;

	while(*pPreOrder != *pOrgInOrder)
	{
		if(pPreOrder == NULL || pOrgInOrder == NULL)
			return;
		nLeftLen++;
		pOrgInOrder++;
	}

	int nRightLen = nTreeLen - nLeftLen - 1;

	if(nLeftLen > 0)
		Rebuild(pPreOrder+1, pInOrder, nLeftLen, &((*root)->left));

	if(nRightLen > 0)
		Rebuild(pPreOrder+nLeftLen+1, pInOrder+nLeftLen+1, nRightLen, &((*root)->right));
}

int _tmain(int argc, _TCHAR* argv[])
{
	char pre[7] = "abdcef";
	char in[7] = "dbaecf";

	Node * root = NULL;
	Rebuild(pre,in,6,&root);
	return 0;
}