#include <stdio.h>
//二叉树链表结构
typedef struct Node{
char data;
struct Node * LChild;
struct Node * RChild;
}BiTNode, *BiTree;
//创建二叉树链表
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 PreOrder(BiTree root){
if(root != NULL){
printf("%c ",root -> data);
PreOrder(root -> LChild);
PreOrder(root -> RChild);
}
}
//中序遍历输出二叉树
void InOrder(BiTree root)
{
if (root != NULL){
InOrder(root -> LChild);
printf("%c ",root -> data);
InOrder(root -> RChild);
}
}
//后序遍历输出二叉树
void PostOrder(BiTree root)
{
if(root != NULL){
PostOrder(root -> LChild);
PostOrder(root -> RChild);
printf("%c ",root -> data);
}
}
//叶子结点
void YPreOrder(BiTree root){
if(root != NULL){
if(root -> LChild == NULL && root -> RChild == NULL) printf("%c",root -> data);
PreOrder(root -> LChild);
PreOrder(root -> RChild);
}
}
//统计叶子节点数目
int leaf(BiTree root){
int LeafCount;
if(root == NULL) LeafCount = 0;
else if ((root -> LChild == NULL)&&(root -> RChild == NULL)) LeafCount =1;
else
LeafCount = leaf(root -> LChild) + leaf(root -> RChild);
return LeafCount;
}
//遍历求二叉树高度
int PostTreeDepth(BiTree bt){
int hl,hr,max;
if(bt != NULL){
hl = PostTreeDepth(bt -> LChild);
hr = PostTreeDepth(bt -> RChild);
max = hl>hr?hl:hr;
return(max + 1);
}
else return (0);
}
int main()
{
BiTree tree;
CreateBiTree(&tree);
printf("\n\n先序遍历二叉树结点:\n\n");
PreOrder(tree);
printf("\n\n中序遍历二叉树结点:\n\n");
InOrder(tree);
printf("\n\n后序遍历二叉树结点:\n\n");
PostOrder(tree);
printf("\n\n先序遍历二叉树叶子结点:\n\n");
YPreOrder(tree);
printf("\n\n叶子节点的数目为:\n\n%d",leaf(tree));
printf("\n\n叶子节点的高度为:\n\n%d",PostTreeDepth(tree));
}
二叉树最简单构成
最新推荐文章于 2023-10-11 19:44:34 发布