二叉树的建立与基本操作
2011-07-09 09:32
323 查看
二叉树的建立与基本操作(10分)
成绩: 10 / 折扣: 0.8
在本实验中,程序的输入是一个(扩展)二叉树的先序序列。例如:如图所示的二叉树,其(扩展)二叉树先序序列为ab#d##ce### 。
程序实现二叉树的如下操作:
1) 建立二叉链表
2) 二叉树的先序、中序、后序遍历
3)求解二叉树的叶子结点个数
4)将二叉树中所有结点的左、右子树相互交换
程序的输出为:
二叉树的凹入表示,二叉树的先序序列、中序序列、后序序列,二叉树的叶子结点个数,左、右子树相互交换后的二叉树的凹入表示, 左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列 。
在输出凹入表示的二叉树时,先输出根结点,然后依次输出左右子树,上下层结点之间相隔3 个空格,如:针对上面给出的输入,输出的内容应为:
BiTree
a
b
d
c
e
pre_sequence : abdce
in_sequence : bdaec
post_sequence : dbeca
Number of leaf: 2
BiTree swapped
a
c
e
b
d
pre_sequence : acebd
in_sequence : ceadb
post_sequence : ecdba
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct treenode
{
char data;
struct treenode *left,*right;
};
int leaf=0;
struct treenode *CreateBiTree(struct treenode *p)
{
int i,j,k,len,left=1;
char c;
scanf("%c",&c);
if (c == '#')
{
return NULL;
}
else
{
p = (struct treenode*)malloc(sizeof(struct treenode));
p->data = c;
p->left = CreateBiTree(p->left);
p->right = CreateBiTree(p->right);
}
return p;
}
void PrintTree(struct treenode *p,int space)
{
int i;
if (p == NULL)
{
return;
}
if (p->left == NULL && p->right == NULL)
{
leaf++;
}
for (i = 0;i < space;i++)
{
printf(" ");
}
printf("%c\n",p->data);
PrintTree(p->left,space+4);
PrintTree(p->right,space+4);
}
void PreOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
printf("%c",p->data);
PreOrderTraverse(p->left);
PreOrderTraverse(p->right);
}
void InOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
InOrderTraverse(p->left);
printf("%c",p->data);
InOrderTraverse(p->right);
}
void PostOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
PostOrderTraverse(p->left);
PostOrderTraverse(p->right);
printf("%c",p->data);
}
void Swap(struct treenode *p)
{
struct treenode *q;
if (p == NULL)
{
return;
}
Swap(p->left);
Swap(p->right);
q=p->right;
p->right=p->left;
p->left=q;
}
void main()
{
int i,j,k;
char in[100];
struct treenode *root;
root = (struct treenode*)malloc(sizeof(struct treenode));
root=CreateBiTree(root);
printf("BiTree\n");
PrintTree(root,0); //pre-output
printf("pre_sequence : ");
PreOrderTraverse(root); //pre,in,post
printf("\n");
printf("in_sequence : ");
InOrderTraverse(root);
printf("\n");
printf("post_sequence : ");
PostOrderTraverse(root);
printf("\n");
printf("Number of leaf: %d\n",leaf);
printf("BiTree swapped\n");
Swap(root);
PrintTree(root,0);
printf("pre_sequence : ");
PreOrderTraverse(root); //pre,in,post
printf("\n");
printf("in_sequence : ");
InOrderTraverse(root);
printf("\n");
printf("post_sequence : ");
PostOrderTraverse(root);
printf("\n");
}
成绩: 10 / 折扣: 0.8
在本实验中,程序的输入是一个(扩展)二叉树的先序序列。例如:如图所示的二叉树,其(扩展)二叉树先序序列为ab#d##ce### 。
程序实现二叉树的如下操作:
1) 建立二叉链表
2) 二叉树的先序、中序、后序遍历
3)求解二叉树的叶子结点个数
4)将二叉树中所有结点的左、右子树相互交换
程序的输出为:
二叉树的凹入表示,二叉树的先序序列、中序序列、后序序列,二叉树的叶子结点个数,左、右子树相互交换后的二叉树的凹入表示, 左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列 。
在输出凹入表示的二叉树时,先输出根结点,然后依次输出左右子树,上下层结点之间相隔3 个空格,如:针对上面给出的输入,输出的内容应为:
BiTree
a
b
d
c
e
pre_sequence : abdce
in_sequence : bdaec
post_sequence : dbeca
Number of leaf: 2
BiTree swapped
a
c
e
b
d
pre_sequence : acebd
in_sequence : ceadb
post_sequence : ecdba
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct treenode
{
char data;
struct treenode *left,*right;
};
int leaf=0;
struct treenode *CreateBiTree(struct treenode *p)
{
int i,j,k,len,left=1;
char c;
scanf("%c",&c);
if (c == '#')
{
return NULL;
}
else
{
p = (struct treenode*)malloc(sizeof(struct treenode));
p->data = c;
p->left = CreateBiTree(p->left);
p->right = CreateBiTree(p->right);
}
return p;
}
void PrintTree(struct treenode *p,int space)
{
int i;
if (p == NULL)
{
return;
}
if (p->left == NULL && p->right == NULL)
{
leaf++;
}
for (i = 0;i < space;i++)
{
printf(" ");
}
printf("%c\n",p->data);
PrintTree(p->left,space+4);
PrintTree(p->right,space+4);
}
void PreOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
printf("%c",p->data);
PreOrderTraverse(p->left);
PreOrderTraverse(p->right);
}
void InOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
InOrderTraverse(p->left);
printf("%c",p->data);
InOrderTraverse(p->right);
}
void PostOrderTraverse(struct treenode *p)
{
if (p == NULL)
{
return;
}
PostOrderTraverse(p->left);
PostOrderTraverse(p->right);
printf("%c",p->data);
}
void Swap(struct treenode *p)
{
struct treenode *q;
if (p == NULL)
{
return;
}
Swap(p->left);
Swap(p->right);
q=p->right;
p->right=p->left;
p->left=q;
}
void main()
{
int i,j,k;
char in[100];
struct treenode *root;
root = (struct treenode*)malloc(sizeof(struct treenode));
root=CreateBiTree(root);
printf("BiTree\n");
PrintTree(root,0); //pre-output
printf("pre_sequence : ");
PreOrderTraverse(root); //pre,in,post
printf("\n");
printf("in_sequence : ");
InOrderTraverse(root);
printf("\n");
printf("post_sequence : ");
PostOrderTraverse(root);
printf("\n");
printf("Number of leaf: %d\n",leaf);
printf("BiTree swapped\n");
Swap(root);
PrintTree(root,0);
printf("pre_sequence : ");
PreOrderTraverse(root); //pre,in,post
printf("\n");
printf("in_sequence : ");
InOrderTraverse(root);
printf("\n");
printf("post_sequence : ");
PostOrderTraverse(root);
printf("\n");
}
相关文章推荐
- C++二叉树结构的建立与基本操作
- 二叉树的建立和基本操作(递归实现)
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- 二叉树的建立基本操作(链表方式)(一)
- 二叉树的建立与基本操作
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 二叉树的建立和基本操作
- 二叉树的建立和基本操作
- 树 二叉树的建立和基本操作
- 八.二叉树各种操作的C语言实现 树的一些基本的操作,包括,树的建立,树的深度,
- C++二叉树结构的建立与基本操作
- [数据结构] 二叉树的建立及其基本操作
- 实验三 二叉树的基本操作(建立)及遍历
- 二叉树建立及其基本操作
- 10. 二叉树的建立与基本操作
- 实验三 二叉树的基本操作(建立)及遍历
- 二叉树的建立和基本操作<一>
- 数据结构(C语言实现) - 二叉树的基本操作(建立,遍历,结点数,叶子结点数,高度,按树状打印,输出叶子结点等)
- 二叉树的建立及其基本操作
- 二叉树的建立和基本操作