已知二叉树如有图所示
答案:1 悬赏:50 手机版
解决时间 2021-11-09 08:48
- 提问者网友:温旧梦泪无声
- 2021-11-09 02:24
已知二叉树如有图所示
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-11-09 03:53
(1) 二叉链表储存图:
#A#
/
#B# ^C#
/
#D# ^E^ ^F#
/
^G^ #H# #I^
/ /
^J^ ^K^ ^M^
上图,符号#表示指针,符号^表示空结点.
(2) 先序遍历序列: A B D G H J K E C F I M
中序遍历序列: G D J H K B E A C F M I
后序遍历序列: G J K H D E B M I F C A
(3) 转换为森林:
A C F I
/ |
B E M
/ |
D H K
| |
G J
上图,树C里的结点C是根结点,这个树就只有C这个结点.
树F里的结点F是根结点,这个树就只有F这个结点.
// C语言测试程序
// 创建二叉树,输入先序遍历序列: ABDG##HJ##K##E##C#F#IM###
// 先序遍历序列: ABDGHJKECFIM
// 中序遍历序列: GDJHKBEACFMI
// 后序遍历序列: GJKHDEBMIFCA
#include
#include
typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}Bitree;
//用"先序遍历"算法创建二叉树
void CreateBiTree(Bitree **bt)
{
char s;
scanf("%c",&s); //输入数据
if(s=='#') //'#'是空节点
*bt=NULL;
else
{
*bt=(Bitree *)malloc(sizeof(Bitree));
(*bt)->data=s;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));
}
}
//用"先序遍历"输出节点
void preOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
printf("%c",ptr->data);
preOrder(ptr->lchild);
preOrder(ptr->rchild);
}
}
//用"中序遍历"输出节点
void inOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
inOrder(ptr->lchild);
printf("%c",ptr->data);
inOrder(ptr->rchild);
}
}
//用"后序遍历"输出节点
void postOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
postOrder(ptr->lchild);
postOrder(ptr->rchild);
printf("%c",ptr->data);
}
}
int main()
{
Bitree *root;
printf("创建二叉树,输入先序遍历序列:");
CreateBiTree(&root);
printf("先序遍历序列: ");
preOrder(root);
printf("
中序遍历序列: ");
inOrder(root);
printf("
后序遍历序列: ");
postOrder(root);
printf("
");
return 0;
}
#A#
/
#B# ^C#
/
#D# ^E^ ^F#
/
^G^ #H# #I^
/ /
^J^ ^K^ ^M^
上图,符号#表示指针,符号^表示空结点.
(2) 先序遍历序列: A B D G H J K E C F I M
中序遍历序列: G D J H K B E A C F M I
后序遍历序列: G J K H D E B M I F C A
(3) 转换为森林:
A C F I
/ |
B E M
/ |
D H K
| |
G J
上图,树C里的结点C是根结点,这个树就只有C这个结点.
树F里的结点F是根结点,这个树就只有F这个结点.
// C语言测试程序
// 创建二叉树,输入先序遍历序列: ABDG##HJ##K##E##C#F#IM###
// 先序遍历序列: ABDGHJKECFIM
// 中序遍历序列: GDJHKBEACFMI
// 后序遍历序列: GJKHDEBMIFCA
#include
#include
typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}Bitree;
//用"先序遍历"算法创建二叉树
void CreateBiTree(Bitree **bt)
{
char s;
scanf("%c",&s); //输入数据
if(s=='#') //'#'是空节点
*bt=NULL;
else
{
*bt=(Bitree *)malloc(sizeof(Bitree));
(*bt)->data=s;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));
}
}
//用"先序遍历"输出节点
void preOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
printf("%c",ptr->data);
preOrder(ptr->lchild);
preOrder(ptr->rchild);
}
}
//用"中序遍历"输出节点
void inOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
inOrder(ptr->lchild);
printf("%c",ptr->data);
inOrder(ptr->rchild);
}
}
//用"后序遍历"输出节点
void postOrder(Bitree *ptr)
{
if(ptr!=NULL)
{
postOrder(ptr->lchild);
postOrder(ptr->rchild);
printf("%c",ptr->data);
}
}
int main()
{
Bitree *root;
printf("创建二叉树,输入先序遍历序列:");
CreateBiTree(&root);
printf("先序遍历序列: ");
preOrder(root);
printf("
中序遍历序列: ");
inOrder(root);
printf("
后序遍历序列: ");
postOrder(root);
printf("
");
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯