剑指offer 二叉树重建

来源:互联网 发布:浅谈软件测试技术 编辑:程序博客网 时间:2024/06/05 23:54

问题描述:

 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。假如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序序列{4,7,2,1,5,3,8,6},则重建二叉树并返回 
#include<stdio.h>#include<malloc.h>typedef struct Node{struct Node *left;struct Node *right;int value; }Node;Node *creatBinaryTree(int *pre,int *mid,int length){int i,pos;int preLeft[8],preRight[8],midLeft[8],midRight[8];Node *root;root = (Node*)malloc(sizeof(Node));root->value = pre[0];if(length>0){for(pos = 0;pos<length;pos++){if(pre[0] == mid[pos])break;}for(i = 0;i<pos;i++){preLeft[i] = pre[i+1];midLeft[i] = mid[i];}for(i = pos+1;i<length;i++){preRight[i-pos-1] = pre[i];midRight[i-pos-1] = mid[i];}root->left = creatBinaryTree(preLeft,midLeft,pos);root->right = creatBinaryTree(preRight,midRight,length - pos - 1);}return root;}int main(){int pre[8] = {1,2,4,7,3,5,6,8};int mid[8] = {4,7,2,1,5,3,8,6};Node *root;root = (Node*) malloc(sizeof(Node));root = creatBinaryTree(pre,mid,8);printf("%d",root->left->left->right->value); } 


原创粉丝点击