您的位置:首页 > Web前端

剑指offer 二叉树重建

2017-06-20 23:36 417 查看
问题描述:

 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。假如输入前序遍历序列{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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: