//#ifndef TREE_C_INCLUDED
//#define TREE_C_INCLUDED
#include <stdio.h>
#include <stdlib.h>
int deepcount;
int leafcount;
typedef struct Node
{
struct node *Lchild;
struct node *Rchild;
char data;
} BiTNode, *BiTree;
//创建二叉树
void createBiTree(BiTree *T)
{
char ch=getchar();;
if('.' == ch)
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T) -> data = ch;
createBiTree(&((*T) -> Lchild));
createBiTree(&((*T) -> 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 PreTreeDepth(BiTree bt,int h)
{
if(bt!=NULL)
{
if(h>deepcount) deepcount = h;
PreTreeDepth(bt->Lchild,h+1);
PreTreeDepth(bt->Rchild,h+1);
}
}
//求叶子数
int leaf (BiTree root)
{
if(root!=NULL)
{
leaf(root->Lchild);
leaf(root->Rchild);
if(root->Lchild==NULL && root->Rchild==NULL)
{
printf("%c",root->data);
leafcount++;
}
}
return leafcount;
}
void main()
{
BiTree t;
printf("输入字符,先序建立二叉树:\n");
createBiTree (&t);
printf("先序遍历二叉树顺序为:\n");
PreOrder (t);
printf("\n中序遍历二叉树顺序为:\n");
InOrder (t);
printf("\n后序遍历二叉树顺序为:\n");
PostOrder (t);
int temp = leaf(t);
printf("\n叶子数量为:%d\n",leafcount);
PreTreeDepth (t,1);
printf("\n树的高度为:%d\n",deepcount);
}
//#define TREE_C_INCLUDED
#include <stdio.h>
#include <stdlib.h>
int deepcount;
int leafcount;
typedef struct Node
{
struct node *Lchild;
struct node *Rchild;
char data;
} BiTNode, *BiTree;
//创建二叉树
void createBiTree(BiTree *T)
{
char ch=getchar();;
if('.' == ch)
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T) -> data = ch;
createBiTree(&((*T) -> Lchild));
createBiTree(&((*T) -> 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 PreTreeDepth(BiTree bt,int h)
{
if(bt!=NULL)
{
if(h>deepcount) deepcount = h;
PreTreeDepth(bt->Lchild,h+1);
PreTreeDepth(bt->Rchild,h+1);
}
}
//求叶子数
int leaf (BiTree root)
{
if(root!=NULL)
{
leaf(root->Lchild);
leaf(root->Rchild);
if(root->Lchild==NULL && root->Rchild==NULL)
{
printf("%c",root->data);
leafcount++;
}
}
return leafcount;
}
void main()
{
BiTree t;
printf("输入字符,先序建立二叉树:\n");
createBiTree (&t);
printf("先序遍历二叉树顺序为:\n");
PreOrder (t);
printf("\n中序遍历二叉树顺序为:\n");
InOrder (t);
printf("\n后序遍历二叉树顺序为:\n");
PostOrder (t);
int temp = leaf(t);
printf("\n叶子数量为:%d\n",leafcount);
PreTreeDepth (t,1);
printf("\n树的高度为:%d\n",deepcount);
}