#include<stdio.h>
#include<stdlib.h>
int count;
struct Node
{
int data;
struct Node *left;
struct Node *right;
};
/*
void createTree(struct Node **root)//如何理解 二级指针存放的是地址的地址 因为创建树是要实现的 root->left root->right的改变
{
int data;
scanf("%d",&data);
if(data==-1)
{
*root=NULL;
}
else
{
*root=(struct Node *)malloc(sizeof(struct Node));
(*root)->data=data;
createTree(&((*root)->left));
createTree(&((*root)->right));
}
}*/
struct Node *createTree(struct Node *root,int num[])
{
int data;
data=num[count];
if(data==-1)
{
return NULL;
}
else
{
root=(struct Node *)malloc(sizeof(struct Node));
root->data=data;
count++;
root->left=createTree(root->left,num);
count++;
root->right=createTree(root->right,num);
}
}
//先序遍历
void PreTraverse(struct Node *root)
{
if(root!=NULL)
{
printf("%d ",root->data);
PreTraverse(root->left);
PreTraverse(root->right);
}
}
//中序遍历
void MidTraverse(struct Node *root)
{
if(root!=NULL)
{
MidTraverse(root->left);
printf("%d ",root->data);
MidTraverse(root->right);
}
}
//后序遍历
void BehindTraverse(struct Node *root)
{
if(root!=NULL)
{
BehindTraverse(root->left);
BehindTraverse(root->right);
printf("%d ",root->data);
}
}
int main()
{
struct Node *root=NULL;//定义头指针 指针root指向的是node
int num[]={1,2,4,-1,-1,5,-1,-1,3,-1,-1};
root=createTree(root,num);
PreTraverse(root);
printf("\n");
MidTraverse(root);
printf("\n");
BehindTraverse(root);
}
09-06
1002
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-09