设为首页 加入收藏

TOP

二叉树建立、遍历(前序,中序,后序),求叶节点个数,求节点个数 (一)
2014-11-23 22:08:16 来源: 作者: 【 】 浏览:9
Tags:建立 遍历 前序 中序 后序 节点 个数

二叉树是笔试面试中考试最频繁的数据结构之一,主要包括,程序建立一个二叉树,三种次序遍历二叉树,返回叶子节点的数目,求二叉树节点的总数等。建立一个二叉树节点的数据结构

typedef struct Node
{
int data;
struct Node *left,*right;
}Node;,结构体内包括数据,左子树,又子树;

一、建立二叉树的程序代码如下


[cpp] Node *CreatBTree() //建立二叉树
{
Node *t;
int x;
scanf("%d",&x);
if(x==0)
{
t=NULL;
}
else
{
t=(Node*)malloc(sizeof(Node));
t->data=x;
printf("\n请输入%d结点的左子结点:",t->data );
t->left=CreatBTree();
printf("\n请输入%d结点的右子结点:",t->data );
t->right=CreatBTree();
}
return t;
}

Node *CreatBTree() //建立二叉树
{
Node *t;
int x;
scanf("%d",&x);
if(x==0)
{
t=NULL;
}
else
{
t=(Node*)malloc(sizeof(Node));
t->data=x;
printf("\n请输入%d结点的左子结点:",t->data );
t->left=CreatBTree();
printf("\n请输入%d结点的右子结点:",t->data );
t->right=CreatBTree();
}
return t;
}

二、前序遍历二叉树


[cpp] void preVisit(Node *T)
{
if(T==NULL) return;
else
{
printf("%3d",T->data);
preVisit(T->left);
preVisit(T->right);
}
}

void preVisit(Node *T)
{
if(T==NULL) return;
else
{
printf("%3d",T->data);
preVisit(T->left);
preVisit(T->right);
}
}
三、中序遍历二叉树


[cpp] void middVisit(Node *T)
{
if(T==NULL) return;
else
{
middVisit(T->left);
printf("%3d",T->data);
middVisit(T->right);
}
}

void middVisit(Node *T)
{
if(T==NULL) return;
else
{
middVisit(T->left);
printf("%3d",T->data);
middVisit(T->right);
}
}
四、后序遍历二叉树


[cpp] void lastVisit(Node *T)
{
if(T==NULL) return;
else
{
lastVisit(T->left);
lastVisit(T->right);
printf("%3d",T->data);
}
}

void lastVisit(Node *T)
{
if(T==NULL) return;
else
{
lastVisit(T->left);
lastVisit(T->right);
printf("%3d",T->data);
}
}
五、返回叶子节点数目


[cpp] int leafnum(Node *T)
{
if (!T)
{
return 0;
}
else if ((!T->left)&&(!T->right))
{
return 1;
}
else
{
return ((leafnum(T->left)+leafnum(T->right)));
}
}

int leafnum(Node *T)
{
if (!T)
{
return 0;
}
else if ((!T->left)&&(!T->right))
{
return 1;
}
else
{
return ((leafnum(T->left)+leafnum(T->right)));
}
}
六、返回节点总数目


[cpp] view plaincopyprint int Nodenum(Node *T)
{
if (T)
{
return 1+Nodenum(T->left)+Nodenum(T->right);
}
if (T==NULL)
{
return 0;
}

}

int Nodenum(Node *T)
{
if (T)
{
return 1+Nodenum(T->left)+Nodenum(T->right);
}
if (T==NULL)
{
return 0;
}

}
七、测试程序;[cpp] int menu();
void main()
{
Node *T=NULL;
int choice;
do{
choice=menu();
if(choice==1)
{
printf("二叉树的建立,以输入“0”表示结束:!\n");
printf("请输入根结点:\n");
T=CreatBTree();
printf("二叉树成功建立");
}
else if(choice==2)
{
printf("先序遍历二叉树 :\n");
preVisit(T);
}
else if(choice==3)
{
printf("中序遍历二叉树:\n");
middVisit(T);
}
else if(choice==4)
{
printf("后序遍历二叉树 :\n ");
lastVisit(T);
}
else if(choice==5)
{
int ct=10;
ct=leafnum(T);
printf(" 二叉树的叶子结点数为 : \n");
printf("%d\n",ct);

}
else if

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言string.h常用函数总结 下一篇C和指针Chapter1

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: