主要是传递指针。因为传递指针的时候,相当于是在初始化的时候创建,参照链表的初始化,就是传递的二级指针,否则会提示你传入的变量没有被初始化
int Create_tree(treePtr *L)
{
char ch;
scanf("%c", &ch);
if (ch == '#')
{
(*L)=NULL;
}
else
{
(*L) = (treePtr)malloc(sizeof(Treenode));
if (!(*L))
{
return ERROR;//define ERROR 0
}
(*L)->data = ch;
Create_tree(&((*L)->left));
Create_tree(&((*L)->right));
}
return OK;//#define OK 1
}
因此在创建左孩子右孩子的时候,就需要传递其指针的二级指针
效果图如下:
完整源码;
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define ERROR 0
#define TRUE 1
#define OK 1
#define OVERFLOW 999
typedef int ElemType;
//TREE
typedef struct node
{
char data;
struct node* left, * right;
}Treenode, * treePtr;
//create
int Create_tree(treePtr* L)
{
char ch;
scanf("%c", &ch);
if (ch == '#')
{
(*L) = NULL;
}
else
{
(*L) = (treePtr)malloc(sizeof(Treenode));
if (!(*L))
{
return ERROR;//define ERROR 0
}
(*L)->data = ch;
Create_tree(&((*L)->left));
Create_tree(&((*L)->right));
}
return OK;//#define OK 1
}
int Traverse(treePtr L)
{
if (L == NULL)
{
return 0;
}
else
{
Traverse(L->left);
printf("%c", L->data);
Traverse(L->right);
}
}
int main()
{
treePtr L;
Create_tree(&L);
Traverse(L);
return 0;
}
如有错误,欢迎各位朋友给出你们宝贵的意见。