学数据结构的时候,没有认真学习,有点不太会,最近准备重拾一下。
最不懂的就是,为什么有时使用一级指针,有时候使用二级指针。
我现在的理解就是,用一级指针就是改变这个指针的值就行。用二级指针,就是需要改变这个指针的指向。
下面就是代码部分,输入只有所有的叶子出现时,才会停止递归,eg:AB##C##
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//前序遍历
void PreOrderTraverse(BiTree T){
if(T == NULL)
return ;
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
//中序遍历
void InOrderTraverse(BiTree T){
if(T == NULL)
return ;
PreOrderTraverse(T->lchild);
printf("%c ",T->data);
PreOrderTraverse(T->rchild);
}
//后序遍历
void PostOrderTraverse(BiTree T){
if (T == NULL)
return ;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c ",T->data);
}
//创造二叉树,需要用到二级指针,因为需要修改指针的指向
void CreateBiTree(BiTree *T){
char ch;
//当全部的叶子节点出来时,才会停止递归,eg:ABDG##H###CE#I##F##
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else{
*T=(BiTree )malloc(sizeof(BiTNode));
if(!*T)
exit(-1);
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
int main()
{
BiTree T;
CreateBiTree(&T);
//指针只能改变指针的变量,如果想要改变指针的指向,就得用指针的指向
printf("前序遍历:");
PreOrderTraverse(T);
printf("中序遍历:");
InOrderTraverse(T);
printf("后序遍历:");
PostOrderTraverse(T);
return 0;
}
参考:(74条消息) 二叉树的建立及其递归遍历(C语言实现)_dream0130__的博客-CSDN博客_递归遍历二叉树