在建立之前要先了解一些知识点:
1、首先是malloc()
/**
* 1、首先。了解一下malloc()这个方法,这个方法的作用是开辟一块空间,并返回该空间的地址(本来是void的,但是实际情况都要强制转换);
* 例如:int * p = (int *)malloc(sizeof(int))
* sizeof(int)指开辟一个int大小的空间
* (int *)这部分指返回一个int类型的指针地址
*
* 其实如果只是让我们理解int * p = (int *)malloc(sizeof(16))
* 我们可以这样理解,当我们调用malloc(sizeof(16))的时候,内存中开辟了一个大小为16的空间【 】,那么怎么划分这个空间的(就是按照什么类型划分这个空间呢?)
* 我们(int)这个地方就可以指定怎么划分【 | | | 】 这样子就把这个大空间按照int大小划分成4个小空间啦!
* 那么我们如何使用这块空间呢? 那么我们能想到的就是返回这块空间的首地址既然是地址,那么就需要使用指针因此有(int *),最后用一个该类型的指针变量
* 来接收这个地址就可以啦!
* int * p = (int *)malloc(sizeof(16))因此,这句的作用就是开辟一个按照int类型划分的大小为16的空间,并且用p来指向这个空间
*
* 2、 int *p; int **p; *BiTree p ; *BiTree *p;
* @return
*/
2、了解int *p,int **p,*BiTree p,*BiTree *p
3、递归过程 (也就是弹栈和压栈)
在这里插入图片描述
4、代码
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node *LChild;
struct Node *RChild;
}BiTNode, *BiTree;
int main()
{
void CreateBiTree(BiTree *bt);
void Visit(char ch);
void PreOrder(BiTree root);
BiTree T;
CreateBiTree(&T);
printf("先序遍历序列为:");
PreOrder(T);
return 0;
}
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if(ch=='.')
*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}
void Visit(char ch)
{
printf("%c ",ch);
}
void PreOrder(BiTree root)
{
if (root!=NULL)
{
Visit(root ->data);
PreOrder(root ->LChild);
PreOrder(root ->RChild);
}
}
|