跟着米Sir学编程
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树-约定用前序遍历输入
void CreatBiTree(BiTree &T){
char c;
scanf("%c",&c);
if(c==' '){
T=NULL;
}
else{
//创建节点
T = (BiTNode*)malloc(sizeof(BiTNode));
T->data=c; //先创建头结点,再底过程创建左右节点
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
void visit(char a,int b){
printf("%c位于第%d层\n",a,b);
}
//先序遍历
void PreOrderTree(BiTree T,int level){
if(T){
visit(T->data,level); //你要对节点做什么?(自己定义)
PreOrderTree(T->lchild,level+1);
PreOrderTree(T->rchild,level+1);
}
}
int main()
{
int level = 1;
BiTree T = NULL;
CreatBiTree(T);
PreOrderTree(T,level);
system("pause");
return 0;
}
/*
问题说明:
1.为什么输入的时候,要求用规定的三种方式(前中后序遍历)输入??
这主要是为了实现递归操作。递归的实现前前提是要有退出条件(这里的是指针为NULL),其实指针NULL的节点就是叶子节点,如果我们不这样设置,那就不会退出循环。
比如:
我们随便输入abcde 5个节点,我们发现他没有输出结果,是因为你没有给他退出循环的条件,可以发现他是一个右斜树,如果要输出一个完整的二叉树,则应该
输入‘ ’表示叶子节点,即退出当前循环的条件
*/
网友评论