剑指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
- 《剑指Offer》面试题-重建二叉树
- 剑指offer--面试题6: 重建二叉树(树)
- 剑指offer-->面试题6 重建二叉树
- 【剑指offer】面试题6:重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 剑指offer 面试题6 重建二叉树
- 剑指Offer:面试题6 重建二叉树
- 《剑指offer》面试题6:重建二叉树
- 《剑指offer》面试题6重建二叉树
- 剑指offer面试题6--重建二叉树
- 理解《剑指Offer》之面试题6 重建二叉树
- 剑指offer 面试题6 重建二叉树
- 剑指offer面试题6 重建二叉树(c)
- 剑指offer面试题6 重建二叉树(java)
- 《剑指Offer》面试题6:重建二叉树
- 剑指offer--面试题6:重建二叉树--Java实现
- 【剑指Offer学习】【面试题6 :重建二叉树】
- 《剑指Offer》学习笔记--面试题6:重建二叉树
- ReactiveCocoa Weak-Strong Dance
- 软件架构设计-五视图方法论
- Andorid自定义圆形progressBar半径大小
- POJ 1703 Find them, Catch them 并查集
- matlab中{} ()和[] 的区别 -
- 剑指offer 面试题6 重建二叉树
- 过滤器解决中文编码问题
- 使用jstl标签实现双重遍历
- QThread应用详解
- SQL server 根据另一张表的字段更新现有的数据表
- C# 4.0 的新特性之并行运算 Parallel
- 下半年计划(2014.7-2014.12)
- sigaction
- mantis安装、配置和使用中的问题小结