中易网

求一棵以二叉链表存储的二叉树指定节点的层次数

答案:2  悬赏:0  
解决时间 2021-03-05 15:44
求一棵以二叉链表存储的二叉树指定节点的层次数
最佳答案
int TreeDepth(Bitree bt, TreeNode p)
{
if(bt==p) return 1;
else
{
if(bt->LChild==p) return TreeDepth(bt->LChild, p)+1;
if(bt->RChild==p) return TreeDepth(bt->RChild, p)+1;
}
return 0;
}
全部回答
建立一棵以二叉链表作存储结构的二叉树,然后按先序、中序、后序顺序分别遍历这棵二叉树    #include<stdlib.h> #include <stdio.h> #define maxsize 20 typedef struct btnode {    char cdata;    struct btnode *lchild,*rchild; }btnode; btnode *create_bitree() {    int i,j;    char ch;    btnode *s,*t,*p[maxsize];    printf("输入顶点编号及信息,输入0和#结束:i,ch");    scanf("%d,%c",&i,&ch);    while(i==0||ch=='#') break;    while(i!=0 &&ch!='#')     {s=(btnode *)malloc(sizeof(btnode));     s->cdata=ch;     s->lchild=s->rchild=null;         p[i]=s;     if(i==1) t=s;     else     {j=i/2;     if(i%2==0) p[j]->lchild=s;     else p[j]->rchild=s;     }     printf("输入顶点编号及信息,输入0和#结束:i,ch");     scanf("%d,%c",&i,&ch);    }    return t; } void  preorder(btnode *bt) {     if(bt)     {     printf("%c",bt->cdata);     preorder(bt->lchild);     preorder(bt->rchild);     } } void  inorder(btnode *bt) {     if(bt)     {     inorder(bt->lchild);     printf("%c",bt->cdata);     inorder(bt->rchild);     } } void  postorder(btnode *bt)   {     if(bt)     {     postorder(bt->lchild);     postorder(bt->rchild);     printf("%c",bt->cdata);     }    } void levelorder(btnode *bt)         { btnode* queue[maxsize];     int front,rear;     if (bt==null) return;     front=0;         rear=0;     queue[rear++]=bt;     while(front!=rear)     {printf("%c",queue[front]->cdata);         if (queue[front]->lchild!=null)       {  queue[rear]=queue[front]->lchild;rear++;     }     if (queue[front]->rchild!=null)       {  queue[rear]=queue[front]->rchild; rear++;     }     front++;    } } void main() {   int j=1;   btnode *t;   t=create_bitree();   while(j)    {     printf("\n");     printf("请选择操作:\n");     printf("1:  二叉树的前序遍历\n");     printf("2:  二叉树的中序遍历\n");     printf("3:  二叉树的后序遍历\n");     printf("4:  二叉树的层次遍历\n");     printf("0:  退出程序\n");     scanf("%d",&j);     switch(j)     {         case 0: printf(" 程序退出!\n ");break;     case 1: printf("前序遍历结果:\n"); preorder(t);     break;     case 2: printf("中序遍历结果:\n"); inorder(t);     break;     case 3: printf("后序遍历结果:\n"); postorder(t);     break;     case 4: printf("按层遍历结果:\n");     levelorder(t);break;     default : printf("\n输入无效,请重新选择操作!\n" );break;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
QQ空间怎么发微信公众号的图文链接?
千禧小区停车场地址在什么地方,我要处理点事
《人类一败涂地》按键操作方法一览 怎么操作
旺通数码图文广告制作地址在什么地方,想过去
2015年作弊,两年不能参加考试,2017年或是20
为雷锋叔叔扫墓的日记
水冷摩托车如果水不循环会造成什么样的后果
龙之谷90级配什么装备
兰舍原生态硅藻泥鹰潭专卖体验馆在什么地方啊
测血压测哪只胳膊
身高185买喜德盛17寸合适么
中超转会市场为何如此冷清?
西安市信访接待中心自行车租赁点地址在什么地
剑三插件怎么安放?
求助以《风华正茂时》为题的作文!
推荐资讯
2012cad为什么打开是一直在加载
有哪些纯音乐歌名带angle或天使的?越多越好
这个金发双马尾的动漫人物是出自哪里?
删除了DNF安全检测怎么办
氧气在工业上主要用到什么行业
两个人的生辰八字看过以后,说这个盘是正缘桃
从广州大学城广中医到市桥该怎么坐车 有公交
孩子马上要小升初了做什么都慢去学写字现在写
做出纳需要会计上岗证吗?
C++cin.get与cout.put循环搞不懂第二次的循环
索尼65X9300E怎么样?索尼65X9300E好吗
触手苹果直播怎么那么卡
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?