求一棵以二叉链表存储的二叉树指定节点的层次数
答案:2 悬赏:0
解决时间 2021-03-05 15:44
- 提问者网友:唤魂
- 2021-03-04 20:15
求一棵以二叉链表存储的二叉树指定节点的层次数
最佳答案
- 二级知识专家网友:丢不掉的轻狂
- 2021-03-04 21:49
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;
}
{
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;
}
全部回答
- 1楼网友:为你轻狂半世殇
- 2021-03-04 22:26
建立一棵以二叉链表作存储结构的二叉树,然后按先序、中序、后序顺序分别遍历这棵二叉树 #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时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |