#include<stdlib.h>
#include<stdio.h>
typedef struct TreeNode *Tree;
struct TreeNode{
int Data;
Tree Left;
Tree Right;
};
Tree CreateTree1() //版本1 无形参 只有返回值
{
Tree T;
//int X;
char X;
scanf("%c",&X);
if(X == '0')
return NULL; //都要有返回值 类比下面的 先T == NULL 然后统一返回的程序
else{
T = (Tree)malloc(sizeof(struct TreeNode));
T->Data = X;
T->Left = CreateTree1();
T->Right = CreateTree1();
return T;
}
}
Tree CreateTree0() // T的返回 情况与 版本1比较
{
Tree T;
//int X;
char X;
scanf("%c",&X);
if(X == '0')
T = NULL; //都要有返回值 类比下面的 先T == NULL 然后统一返回的程序
else{
T = (Tree)malloc(sizeof(struct TreeNode));
T->Data = X;
T->Left = CreateTree0();
T->Right = CreateTree0();
}
return T;
}
Tree CreateTree2(Tree T) //版本2 有形参有返回值 形参未使用引用
{
//Tree T;
//int X;
char X;
scanf("%c",&X);
if(X == '0')
T = NULL;
else{
T = (Tree)malloc(sizeof(struct TreeNode));
T->Data = X;
T->Left = CreateTree2(T->Left);
T->Right = CreateTree2(T->Right);
}
return T;
}
void CreateTree3(Tree *T) //版本3 返回值为 空 形参使用指针
{
//Tree T;
//int X;
char X;
scanf("%c",&X);
if(X == '0')
*T = NULL;
else{
*T = (Tree)malloc(sizeof(struct TreeNode));
(*T)->Data = X;
CreateTree3(&((*T)->Left));
CreateTree3(&((*T)->Right));
}
}
void CreateTree4(Tree T) //版本4 无返回值 有 形参 并且未使用引用(或指针)
{ //此类型 因为 新建 T 并未给T->Left 故 指向错误 不能正确建树
char X;
scanf("%c",&X);
if(X == '0')
T = NULL;
else
{
T = (Tree)malloc(sizeof(TreeNode));
T->Data = X;
CreateTree4(T->Left);
CreateTree4(T->Right);
}
}
void PreTrv(Tree T) //遍历
{
if(T){
printf("%c ",T->Data);
PreTrv(T->Left);
PreTrv(T->Right);
}
}
int main()
{
Tree T1,T2, T3, T4;
//Way 1
T1 = CreateTree1();
PreTrv(T1);
// way 2
T2 = CreateTree2(T2);
PreTrv(T2);
//way 3
CreateTree3(&T3);
PreTrv(T3);
//错误方法
CreateTree4(T4);//错误 方法
PreTrv(T4);
return 0;
}
构建二叉树
最新推荐文章于 2022-10-25 21:32:39 发布