求教c语言中的遍历是如何在编程上实现的
发布网友
发布时间:2022-04-26 20:53
我来回答
共2个回答
热心网友
时间:2023-11-01 00:57
如果有这么一颗树,按先序遍历是应该这样输入ABD##E##CF###; (#代表返回上一级)
追问为什么在D之后有两个##,在E之后也有两个##?他们返回的又不是同一层啊
追答D的第一个#是D的左子树返回到D,第二个#是D的右子树返回到B(因为右子树递归完,后面就没程序了);同理E的第二个#完了,就直接返回到A(因为这时B这一层也执行的是右子树递归,所以E的右子树递归完了,就连续返回,最后 到达A)。。。。。。。
不知你懂不?
热心网友
时间:2023-11-01 00:57
#include<stdio.h>
#include<stdlib.h>
typedef struct Node //二叉树结构定义
{
char data;
struct Node *lchild;
struct Node *rchild;
}Bitree;
void CreateBiTree(Bitree *&t) //先序遍历创建二叉树
{
char s;
scanf("%c",&s);
if(s=='#')
t=NULL;
else
{
t=(Bitree *)malloc(sizeof(Node));
t->data=s;
CreateBiTree(t->lchild);
CreateBiTree(t->rchild);
}
}
void Output(Bitree *t) //先序遍历输出二叉树
{
if(t!=NULL)
{
printf("%c ",t->data);
Output(t->lchild);
Output(t->rchild);
}
}
void main()
{
Bitree *root;
printf("请以先序遍历依次为二叉树赋值:\n");
CreateBiTree(root);
Output(root);
}
明白否?
热心网友
时间:2023-11-01 00:57
如果有这么一颗树,按先序遍历是应该这样输入ABD##E##CF###; (#代表返回上一级)
追问为什么在D之后有两个##,在E之后也有两个##?他们返回的又不是同一层啊
追答D的第一个#是D的左子树返回到D,第二个#是D的右子树返回到B(因为右子树递归完,后面就没程序了);同理E的第二个#完了,就直接返回到A(因为这时B这一层也执行的是右子树递归,所以E的右子树递归完了,就连续返回,最后 到达A)。。。。。。。
不知你懂不?
热心网友
时间:2023-11-01 00:57
#include<stdio.h>
#include<stdlib.h>
typedef struct Node //二叉树结构定义
{
char data;
struct Node *lchild;
struct Node *rchild;
}Bitree;
void CreateBiTree(Bitree *&t) //先序遍历创建二叉树
{
char s;
scanf("%c",&s);
if(s=='#')
t=NULL;
else
{
t=(Bitree *)malloc(sizeof(Node));
t->data=s;
CreateBiTree(t->lchild);
CreateBiTree(t->rchild);
}
}
void Output(Bitree *t) //先序遍历输出二叉树
{
if(t!=NULL)
{
printf("%c ",t->data);
Output(t->lchild);
Output(t->rchild);
}
}
void main()
{
Bitree *root;
printf("请以先序遍历依次为二叉树赋值:\n");
CreateBiTree(root);
Output(root);
}
明白否?