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

来源:互联网 发布:vb系列游戏是什么 编辑:程序博客网 时间:2024/06/09 20:18

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;}


0 0
原创粉丝点击