您的位置:首页 > 理论基础 > 数据结构算法

数据结构--二叉树(链表)基本操作

2011-12-05 14:10 507 查看
#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct tree{
int key;
struct tree *left;
struct tree *right;

}*BiTree,Node;
//循环创建二叉树
void CreateBiTree(BiTree &T)/*DEVC++无法编译此句话,需要从vs中运行*/
{
int word;
scanf("%d",&word);
if(word==-1)//-1表示该节点下面没有左右孩子
{
T=NULL;
}
else
{    //生成当前的根节点
Node *p=(Node *) malloc (sizeof(Node));//开辟新的节点
T=p;
T->key=word;
CreateBiTree(T->left);//递归建立左子树
CreateBiTree(T->right); //递归建立右子树
}
}
//先序遍历以T为根的二叉树
void PreOrder(BiTree &T)
{
if(T)//T不为空或者根时
{
printf("%d ",T->key);//打印当前节点
PreOrder(T->left);
PreOrder(T->right);

}
}
void InOrder(BiTree &T)
{
if(T)
{
InOrder(T->left);
printf("%d ",T->key);
InOrder(T->right);
}
}
void PostOrder(BiTree &T)
{
if(T)
{
PostOrder(T->left);
PostOrder(T->right);
printf("%d ",T->key);
}
}
// 先序遍历二叉树,以 count 返回二叉树中叶子结点的数目
void CountLeaf(BiTree &T, int &count){
if (T) {
if ((!T->left)&& (!T->right))
count++;    // 对叶子结点计数
CountLeaf( T->left, count);
CountLeaf( T->right, count);
} // if
} // CountLeaf
// T指向二叉树的根,level 为 T 所指结点所在层次,
// 其初值为1,depth 为当前求得的最大层次,其初值为0
void BiTreeDepth(BiTree T, int level, int &depth){
if (T){
if (level>depth) depth=level;
BiTreeDepth(T->left, level+1, depth);
BiTreeDepth(T->right, level+1, depth);
}
}
int main(int argc, char *argv[])
{
BiTree T;
printf("请依次输入1,2,-1,3,4,-1,-1,-1,5,-1,6,-1,-1\n");
CreateBiTree(T);
printf("先序遍历的顺序是\n");
PreOrder(T);
printf("\n中序遍历的顺序是\n");
InOrder(T);
printf("\n后序遍历的顺序是\n");
PostOrder(T);
int count=0;
CountLeaf(T,count);
printf("\n叶子节点的数量是:%d\n",count);
int depth = 0;
BiTreeDepth(T,1,depth);
printf("此二叉树深度:%d\n",depth);
system("PAUSE");
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: