您的位置:首页 > 职场人生

剑指offer 面试题6 重建二叉树

2014-07-14 16:51 337 查看
E:\arithmetic\RebuildBinaryTree

P55

#include <stdio.h>
#include "BinaryTree.h"
TreeNode* reverse(int *pre, int *in, int length );
TreeNode* construct	(int *pre, int *in, int length );
int main(int argc, char *argv[])
{//测试用例: 正常的两个(完全二叉树 ,不完全二叉树);仅有左子树,仅有右子树 仅有一个元素; 两个序列值不同, length<=0;序列为NULL
int a[] = {10,6,4,8,14,12,16};
int b[] = {4,6,8,10,12,14,16};
TreeNode* root = reverse(a, b, sizeof(a)/sizeof(int));
preOrder(root);
printf("\n");
inOrder(root);
printf("\n");

int a1[] = {1,2,4,7,3,5,6,8};
int b1[] = {4,7,2,1,5,3,8,6};
TreeNode* root0 = reverse(a1, b1, sizeof(a1)/sizeof(int));
preOrder(root0);
printf("\n");
inOrder(root0);
printf("\n");

int c[] = {1};
int d[] = {1};
TreeNode* root2 = reverse(c, d, sizeof(c)/sizeof(int));
preOrder(root2);
printf("\n");
inOrder(root2);
printf("\n");

int e[] = {1,2,4,7,3,9,6,8};
int f[] = {4,7,2,1,5,3,8,6};
TreeNode* root3 = reverse(e, f, sizeof(e)/sizeof(int));
preOrder(root3);
printf("\n");
inOrder(root3);
printf("\n");

int a2[] = {1,2,4,7};
int b2[] = {4,7,2,1};
TreeNode* root6 = reverse(a2, b2, sizeof(a2)/sizeof(int));
preOrder(root6);
printf("\n");
inOrder(root6);
printf("\n");

int a3[] = {1,3,5,6,8};
int b3[] = {1,5,3,8,6};
TreeNode* root7 = reverse(a3, b3, sizeof(a3)/sizeof(int));
preOrder(root7);
printf("\n");
inOrder(root7);
printf("\n");

TreeNode* root4 = reverse(NULL, f, sizeof(e)/sizeof(int));
TreeNode* root5 = reverse(e, f, -3);

return 0;
}
TreeNode* reverse(int *pre, int *in, int length ){
if( (pre==NULL) || (in==NULL) || length<=0)
{
printf("error, failed to reverse !\n");
return NULL;
}
//	return construct(pre, pre+length-1, in, in+length-1);
return construct(pre, in, length);
}
TreeNode* construct	(int *pre, int *in, int length ){
if(length == 0){//终止条件 length为0
return NULL;
}
TreeNode *r = malloc(sizeof(TreeNode));
r->value = pre[0];
int i ;
for(i=0 ; i<length ; i++){
//		printf("%d(%d)\t", *(in+i), *(pre+0));
if(*(in+i) == *(pre+0))
break;
}
if(i == length){
printf("\nerror, two sequence is not equal!\n");
return NULL;
}
//	printf("***break***\n");
r->lChild = construct(pre+1, in, i);
r->rChild = construct(pre+i+1, in+i+1, length-i-1);
return r;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: