一、实验内容
1.数据域为字符的一棵二叉树用前序遍历方式输入,创建一个采用二叉链
表存储的二叉树,并按广义表的形式输出这棵二叉树。
2.在实验1的基础上完成这棵二叉树的中序遍历的递归算法。
3.求二叉树的高度。
4.求二叉树的叶子个数。
代码实现:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
#define Stack_Size 1000
typedef char TElemType;
typedef struct BTNode
{
TElemType data;
struct BTNode *lchild,*rchild;
}BTNode,*BTree;
int CreateBTree(BTree *T)//前序遍历创建二叉树
{
char ch;scanf("%c",&ch);
if (ch==' ')*T=NULL;
else{
if (!(*T=(BTNode*)malloc(sizeof(BTNode))))
return 0;
(*T)->data =ch;
CreateBTree(&((*T)->lchild));
CreateBTree(&((*T)->rchild));
}
return 1;
}
void DispBTNode(BTNode *b) //广义表输出二叉树
{
if(b!=NULL)
{
printf("%c",b->data);
if(b->lchild!=NULL||b->rchild!=NULL)
{
printf("(");
DispBTNode(b->lchild);
if(b->rchild!=NULL) printf(",");
DispBTNode(b->rchild);
printf(")");
}
}
}
int BTNodeDepth(BTNode *b) //求二叉树b的深度
{
int lchilddep,rchilddep;
if(b==NULL)
return(0);
else
{
lchilddep=BTNodeDepth(b->lchild); //左子数的高度
rchilddep=BTNodeDepth(b->rchild); //右子树的高度
return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1);
}
}
int LeafNodes(BTNode *p){
//求二叉树叶子结点个数
int num1,num2;
if(p==NULL)
return 0;
else if(p->lchild==NULL&&p->rchild==NULL)
return 1;
else{
num1=LeafNodes(p->lchild);
num2=LeafNodes(p->rchild);
return (num1+num2);
}
}
int TreeNodes(BTNode *p){
//求二叉树结点个数
if(p==NULL)
return 0;
return TreeNodes(p->lchild)+TreeNodes(p->rchild)+1;
}
void InOrder(BTree T)
{
if (T)
{
InOrder(T->lchild); /*中遍历左子树*/
printf("%6c",T->data);/*访问根结束*/
InOrder(T->rchild); /*中根遍历右子树*/
}
}/*InOrder */
void LevelOrder(BTree T){
//层次遍历
BTree q[20],p;
int front=0, rear=0;
if(T){
q[rear]=T;
rear++;
}/*根结点不空,进队*/
while (front!=rear)
{
p=q[front];front ++; printf("%6c",p->data); /*出队并访问*/
/*若左孩子不空,进队*/
if( p->lchild){
q[rear]=p->lchild; rear++;}
/*若右孩子不空,进队*/
if( p->rchild){
q[rear]=p->rchild; rear++;}
}
}/* LevelOrder */
int main(){
BTNode *b;
CreateBTree(&b);
printf("输出二叉树:");
DispBTNode(b);
printf("\n");
InOrder(b);
printf("\n");
printf("Tree High=[%d]\n",BTNodeDepth(b));
printf("Tree Leaf=[%d]\n",LeafNodes(b));
LevelOrder(b);
printf("\n");
printf("Tree Nodes=[%d]\n",TreeNodes(b));
return 0;
}
程序演示:
分析