剑指offer 面试题6 重建二叉树
2014-07-14 16:51
337 查看
E:\arithmetic\RebuildBinaryTree
P55
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; }
相关文章推荐
- 剑指offer面试题6 重建二叉树(java实现)
- 剑指offer-面试题6-重建二叉树
- 【剑指offer】2.3.4树——面试题6:重建二叉树
- 剑指offer——面试题6:重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 剑指offer面试题6 重建二叉树(java)
- 【剑指offer】面试题7:重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 【剑指offer】面试题六:重建二叉树
- 剑指Offer之面试题6:重建二叉树
- 剑指offer-面试题06-重建二叉树
- 剑指offer面试题5-从尾到头打印链表/6-重建二叉树
- [剑指offer][面试题06]重建二叉树
- 剑指offer面试题6:重建二叉树(Java实现)
- 剑指offer - 面试题6:重建二叉树
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- 剑指offer面试题6——重建二叉树(递归)
- 剑指offer-面试题6:重建二叉树
- 剑指offer-面试题6:重建二叉树
- 剑指offer面试题6--重建二叉树