两年前学习数据结构,就为了个期末考试,然而现在跨专业到计算机了,是该好好准备这方面的功课了。现在用的编译器是VS2010语言是C语言。
1、所需头文件
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
2、树的节点的定义
typedef struct BiTNode
{
char data;
BiTNode* lchild;
BiTNode* rchild;
}BiTNode,*BiTree;
3、构造二叉树
//前序遍历构造一棵二叉树
int BuildTree(BiTree& T)//这里用引用是因为节点有所改变,也可以用二级指针
{
char data;
data=getchar();
if(data=='#')
T=NULL;
else
{
if(!(T=(BiTree)malloc(sizeof(BiTNode)))) exit(-1);//
T->data =data;
BuildTree(T->lchild );
BuildTree(T->rchild );
}
return 0;
}
4、广义表输出二叉树
//广义表形式输出二叉树
void PrintBinaryTree(BiTNode* T)
{
if(T)
{
printf("%c",T->data );
if((T->lchild !=NULL)||(T->rchild !=NULL))
{
printf("(");
PrintBinaryTree( T->lchild );
printf(",");
PrintBinaryTree( T->rchild );
printf(")");
}
}
}
5、遍历二叉树
//先序遍历二叉树
int preorder(BiTree T)
{
if(T)
{
printf("%c",T->data );
preorder(T->lchild );
preorder(T->rchild );
}
return 0;
}
6、求二叉树节点数
//求二叉树节点数
int precountNode(BiTree T)
{
static int n=0;
if(T)
{
n++;
precountNode( T->lchild );
precountNode( T->rchild );
}
return n;
}
7、求二叉树叶节点数
//求叶节点数
int leaf_num(BiTree T)
{
if(T==NULL)return 0;
if(T->lchild ==NULL&&T->rchild ==NULL) return 1;
return (leaf_num(T->lchild )+leaf_num(T->rchild ));
}
8、求树的高度
//求树的高度
int BTDepth(BiTree T)
{
int ldep,rdep;
if(T==NULL) return 0;
ldep=BTDepth(T->lchild );
rdep=BTDepth(T->rchild );
if(ldep>rdep)return ldep+1;
else return rdep+1;
}
9、主函数
int _tmain(int argc, _TCHAR* argv[])
{
BiTNode* T;
BuildTree(T);
printf("\n");
printf("广义表输出二叉树为:");
PrintBinaryTree(T);
printf("\n");
printf("先序遍历二叉树为:");
preorder( T);
printf("\n");
printf("该二叉树节点数为:%d",precountNode(T));
printf("\n");
printf("该二叉的叶树节点数为:%d",leaf_num(T));
printf("\n");
printf("该二叉树的高度为:%d",BTDepth(T));
system("pause");
return 0;
}
测试
测试数据如上图所示。
本篇文章供自己复习所用,还有许多需要补充的地方,后面再进行补充