依据两个数组,前序遍历数组和中序遍历数组,建立二叉树;
#include<stdio.h>
#include<stdlib.h>
typedef struct BinaryTree
{
int key;
struct BinaryTree* left;
struct BinaryTree* right;
}Node,*ptrNode;
ptrNode RebuildBinaryTree(int* presort,int prelen,
int* midsort,int midlen)
{
if(prelen<0||prelen!=midlen)
return NULL;
int preleft,preright,count=0;
ptrNode root=(ptrNode)malloc(sizeof(Node));
root->key=presort[0];
root->left=NULL;
root->right=NULL;
while(presort[0]!=midsort[count])
{
count++;
if(count>=prelen)
{
printf("输入遍历数组有误\n");
return NULL;
}
}
preleft=count;
preright=prelen-count-1;
if(preleft>0)
{
root->left=RebuildBinaryTree(presort+1,preleft,midsort,preleft);
}
if(preright>0)
{
root->right=RebuildBinaryTree(presort+preleft+1,preright,midsort+preleft+1,preright);
}
return root;
}
void PreSort(ptrNode head)
{
if(head==NULL)
return ;
printf("%d ",head->key);
PreSort(head->left);
PreSort(head->right);
}
void BehSort(ptrNode head)
{
if(head==NULL)
return ;
BehSort(head->left);
BehSort(head->right);
printf("%d ",head->key);
}
void main()
{
int a[7]={1,2,4,5,3,6,7};
int b[7]={4,2,5,1,6,3,7};
ptrNode root=NULL;
root=RebuildBinaryTree(a,7,b,7);
PreSort(root);
printf("\n");
BehSort(root);
printf("\n");
}