#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char TElemType
typedef int Status
typedef struct BiTNode { // 结点结构
TElemType data
struct BiTNode *lchild, *rchild
// 左右孩子指针
} BiTNode, *BiTree
//以下是建立二叉树存储结构,空节点输入作为#结束标识
Status CreateBiTree(BiTree &T) {
char ch
scanf("%c",&ch)
if(ch=='#') T=NULL
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW)
T->data=ch
CreateBiTree(T->lchild)
CreateBiTree(T->rchild)
}
return OK
} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data)
Preorder(T->lchild)
Preorder(T->rchild)
}
}
void Inorder(BiTree T)
{ // 中序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Inorder(T->lchild)
printf("%c",T->data)
Inorder(T->rchild)
}
}
void Postorder(BiTree T)
{ // 后序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Postorder(T->lchild)
Postorder(T->rchild)
printf("%c",T->data)
}
}
//以下是求叶子结点数
void CountLeaf(BiTree T,int&count){
//请将该算法补充完整,参见第6章课件算法
if(T){
if((!T->lchild)&&(!T->rchild))
count++
CountLeaf(T->lchild,count)
CountLeaf(T->rchild,count)
}
}
//以下是求二叉树的深度
int Depth(BiTree T ){
//请将该算法补充完整,参见第6章课件算法
int depthval,depthLeft,depthRight
if(!T) depthval=0
else{
depthLeft = Depth(T->lchild)
depthRight = Depth(T->rchild)
if(depthLeft>depthRight)depthval = 1+depthLeft
else depthval = 1+depthRight
}
return depthval
}
void main(){
BiTree T
int s=0,d
printf("\n creat of the bitree:\n")
CreateBiTree(T)
printf("\n output result of Preorder:\n")
Preorder(T)
CountLeaf(T,s)
d=Depth(T)
printf("\n leaves=%d\n",s)
printf("\n depth=%d\n",d)
}
刚刚回答了一个类似的问题,以下代码供参考:\x0d\x0a#include "stdio.h"\x0d\x0a#include "stdlib.h"\x0d\x0a#define OK 1\x0d\x0a#define ERROR 0\x0d\x0a#define OVERFLOW -2\x0d\x0a\x0d\x0atypedef char TElemType\x0d\x0atypedef int Status\x0d\x0atypedef struct BiTNode { // 结点结构\x0d\x0a TElemType data\x0d\x0a struct BiTNode *lchild, *rchild\x0d\x0a // 左右孩子指针\x0d\x0a} BiTNode, *BiTree\x0d\x0a\x0d\x0a//以下是建立二叉树存储结构,空节点输入作为#结束标识\x0d\x0aStatus CreateBiTree(BiTree &T) {\x0d\x0a //请将该算法补充完整,参见第6章课件算法或课本\x0d\x0a char ch\x0d\x0a scanf("%c",&ch)\x0d\x0a if(ch=='#') T=NULL\x0d\x0a else{\x0d\x0a if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))\x0d\x0a exit(OVERFLOW)\x0d\x0a T->data=ch\x0d\x0a CreateBiTree(T->lchild)\x0d\x0a CreateBiTree(T->rchild)\x0d\x0a }\x0d\x0a return OK\x0d\x0a\x0d\x0a} // CreateBiTree\x0d\x0avoid Preorder(BiTree T)\x0d\x0a{\x0d\x0a if(T)\x0d\x0a {\x0d\x0a printf("%c",T->data)\x0d\x0a Preorder(T->lchild)\x0d\x0a Preorder(T->rchild)\x0d\x0a } \x0d\x0a} \x0d\x0a\x0d\x0avoid Inorder(BiTree T)\x0d\x0a{ // 中序遍历二叉树 \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T)\x0d\x0a {\x0d\x0a Inorder(T->lchild)\x0d\x0a printf("%c",T->data)\x0d\x0a Inorder(T->rchild)\x0d\x0a }\x0d\x0a}\x0d\x0avoid Postorder(BiTree T)\x0d\x0a{ // 后序遍历二叉树 \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T)\x0d\x0a {\x0d\x0a Postorder(T->lchild)\x0d\x0a Postorder(T->rchild)\x0d\x0a printf("%c",T->data)\x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0a//以下是求叶子结点数\x0d\x0avoid CountLeaf(BiTree T,int&count){ \x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a if(T){\x0d\x0a if((!T->lchild)&&(!T->rchild))\x0d\x0a count++\x0d\x0a CountLeaf(T->lchild,count)\x0d\x0a CountLeaf(T->rchild,count)\x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a//以下是求二叉树的深度\x0d\x0aint Depth(BiTree T ){\x0d\x0a //请将该算法补充完整,参见第6章课件算法\x0d\x0a int depthval,depthLeft,depthRight\x0d\x0a if(!T) depthval=0\x0d\x0a else{\x0d\x0a depthLeft = Depth(T->lchild)\x0d\x0a depthRight = Depth(T->rchild)\x0d\x0a if(depthLeft>depthRight)depthval = 1+depthLeft\x0d\x0a else depthval = 1+depthRight\x0d\x0a }\x0d\x0a return depthval\x0d\x0a}\x0d\x0a\x0d\x0avoid main(){\x0d\x0a BiTree T\x0d\x0a int s=0,d\x0d\x0a printf("\n creat of the bitree:\n")\x0d\x0a CreateBiTree(T)\x0d\x0a printf("\n output result of Preorder:\n")\x0d\x0a Preorder(T)\x0d\x0a CountLeaf(T,s)\x0d\x0a d=Depth(T)\x0d\x0a printf("\n leaves=%d\n",s)\x0d\x0a printf("\n depth=%d\n",d)\x0d\x0a}#include<stdio.h>typedef char TElemType
typedef struct BiTNode /*结点定义*/
{
TElemType data
struct BiTNode *lchild
struct BiTNode *rchild
}BiTNode,*BiTree
BiTNode *CreateBiTree()
{
char c
BiTNode *Root
scanf("%c",&c)
if(c=='@') Root=NULL
else{
Root=(BiTNode *)malloc(sizeof(BiTNode))
Root->data=c
Root->lchild=CreateBiTree()
Root->rchild=CreateBiTree()
}
return(Root)
}
void PrintTree(BiTree T,int h)
{
int i
if (T){
PrintTree(T->rchild,h+1)
for(i=0i<hi++) printf(" ")
printf("%c\n",T->data)
PrintTree(T->lchild,h+1)
}
}
main( )
{
BiTNode* Root
Root=CreateBiTree()
PrintTree(Root,0)
return 0
}