//
// 二叉树的创建,遍历
//
// 用#表示当前的结点为空
//
///
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef char ElemType ; // 元素类型
#define MaxSize 20 // 定义一个常量
typedef struct Node // 二叉树的结点类型定义
{
ElemType data ; // 二叉树结点的内容那个
struct Node * lchild ; // 指向左孩子结点
struct Node * rchild ; // 指向右孩子结点
} Node ;
typedef struct BiTree // 二叉树的类型定义
{
Node * head ; // 二叉树的头结点
} BNode ;
// 先序遍历创建二叉树 递归实现
void CreateBiTree( Node ** t ) // 从结点(*t)开始遍历二叉树
{
ElemType ch ;
scanf("%c" , &ch ) ; // 输入结点的数据
if( ch == '#' ) // 表示该结点为空
{
*t = NULL ;
return ;
}
else // 此结点不为空
{
Node * node = (Node*)malloc(sizeof(Node)) ;
if( !node )
{
printf("申请内存失败!") ;
exit(0) ;
}
node->data = ch ;
node->lchild = NULL ;
node->rchild = NULL ;
*t = node ;
}
CreateBiTree( &(*t)->lchild ) ; // 从左孩子开始递归遍历
CreateBiTree( &(*t)->rchild ) ; // 从右孩子开始递归遍历
}
// 先序递归遍历二叉树
void FirstOrderTraverse( Node * t )
{
if( t != NULL )
{
printf("%c " , t->data ) ;
FirstOrderTraverse( t->lchild ) ;
FirstOrderTraverse( t->rchild ) ;
}
}
// 中序递归遍历二叉树
void InOrderTraverse( Node * t )
{
if( t != NULL )
{
InOrderTraverse( t->lchild ) ;
printf("%c " , t->data ) ;
InOrderTraverse( t->rchild ) ;
}
}
// 后序递归遍历二叉树
void PostOrderTraverse( Node * t )
{
if( t != NULL )
{
PostOrderTraverse( t->lchild ) ;
PostOrderTraverse( t->rchild ) ;
printf("%c " , t->data ) ;
}
}
// 输出二叉树的所有的叶子节点
void PrintLeafNode( Node * t )
{
if( t != NULL )
{
if( t->lchild == NULL && t->rchild == NULL )
{
printf("%c " , t->data ) ;
}
PrintLeafNode( t->lchild ) ;
PrintLeafNode( t->rchild ) ;
}
}
// 输出每个结点在二叉树的层数
void PrintLevel( Node * t , int level )
{
if( t )
{
printf("%c %d\n" , t->data , level ) ;
PrintLevel( t->lchild , level + 1 ) ;
PrintLevel( t->rchild , level + 1 ) ;
}
}
// 测试
int main()
{
BNode btree ;
CreateBiTree( &btree.head ) ;
FirstOrderTraverse( btree.head ) ;
printf("\n") ;
InOrderTraverse( btree.head ) ;
printf("\n") ;
PostOrderTraverse( btree.head ) ;
printf("\n") ;
PrintLeafNode( btree.head ) ;
printf("\n") ;
int level = 0 ;
PrintLevel( btree.head , level ) ;
return 0 ;
}
二叉树的创建与其递归遍历
最新推荐文章于 2022-05-07 20:41:26 发布