// DataStructTest.cpp : Defines the entry point for the console application.
//
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct btnode * bitreptr;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
struct btnode
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
char data; //数据
bitreptr lchild; //左节点指针
bitreptr rchild; //右节点指针
};
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//建立一个树,与书中P84中的是一样的,函数返回一个树的头指针
bitreptr CreateTree()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
bitreptr A,B,C,D,E,F;
bitreptr nodes[6];
for(int i=0;i<6;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
nodes[i]=(bitreptr)malloc(sizeof(btnode));
nodes[i]->lchild=NULL;
nodes[i]->rchild=NULL;
}
A=nodes[0];
B=nodes[1];
C=nodes[2];
D=nodes[3];
E=nodes[4];
F=nodes[5];
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
A->data='A';
A->lchild=B;
A->rchild=E;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B->data='B';
B->lchild=C;
B->rchild=D;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
C->data='C';
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
D->data='D';
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
E->data='E';
E->rchild=F;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
F->data='F';
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return A;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void visit(const bitreptr node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
cout<<node->data<<endl;;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//先根遍历
void preorder(const bitreptr root)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
bitreptr node=root;
if (node!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
visit(node);
preorder(node->lchild);
preorder(node->rchild);
}
}
//中根遍历
void inorder(const bitreptr root)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
bitreptr node=root;
if (node!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
inorder(node->lchild);
visit(node);
inorder(node->rchild);
}
}
//后根遍历
void postorder(const bitreptr root)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
bitreptr node=root;
if (node!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
postorder(node->lchild);
postorder(node->rchild);
visit(node);
}
}
//计算叶子的数目
void countleaf(const bitreptr t,int & count)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if (t!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (t->lchild==NULL &&t->rchild==NULL)
count++;
countleaf(t->lchild,count);
countleaf(t->rchild,count);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
bitreptr root;
//建立树
root=CreateTree();
//
cout<<"先根遍历"<<endl;
preorder(root);
//
cout<<"中根遍历"<<endl;
inorder(root);
//
cout<<"后根遍历"<<endl;
postorder(root);
//
cout<<endl;
int count=0;
countleaf(root,count);
cout<<"页子的数量为:"<<count<<endl;
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。