用先序方法建立一棵二叉树(用二叉链表存储),编写先序遍历、中序遍历、后序遍历程序,输出二叉树的遍历次序,与该二叉树的高度、全部结点数和叶子结点数。
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct StackNode
{
BiTNode data;
struct StackNode *next;
}StackNode,*LinkStack;
int CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#')
{
T=NULL;
}
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrderTraverse2(BiTree T)
{
if(T)
{
InOrderTraverse2(T->lchild);
cout<<T->data;
InOrderTraverse2(T->rchild);
}
}
void InOrderTraverse1(BiTree T)
{
if(T)
{
cout<<T->data;
InOrderTraverse1(T->lchild);
InOrderTraverse1(T->rchild);
}
}
void InOrderTraverse3(BiTree T)
{
if(T)
{
InOrderTraverse3(T->lchild);
InOrderTraverse3(T->rchild);
cout<<T->data;
}
}
int CountLeaf(BiTree T,int&count)
{
if(T)
{
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
return count;
}
int Depth(BiTree T)
{
int m,n;
if(T==NULL)
return 0;
else
{
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n)
return (m+1);
else return (n+1);
}
}
int NodeCount(BiTree T)
{
if(T==NULL)
return 0;
else
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
int main()
{
BiTree tree;
int a=0;
CreateBiTree(tree);
InOrderTraverse1(tree);
cout<<"\n";
InOrderTraverse2(tree);
cout<<"\n";
InOrderTraverse3(tree);
cout<<"\n";
cout<<Depth(tree)<<endl;
cout<<NodeCount(tree)<<endl;
cout<<CountLeaf(tree,a)<<endl;
}