要求针对链式存储的树完成两个操作函数,分别实现先序遍历与后序遍历等功能。

图1:树
具体实现时,树可以采用不同的存储策略。下面给出了一种基于链式存储的实现方案:
#define m 3
typedef char datatype;
typedef struct node {
datatype data;
struct node *child[m];
}node, *tree;
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define m 3
#define MAXLEN 100
typedef char datatype;
typedef struct node {
datatype data;
struct node *child[m];
} node;
typedef node *tree;
// 学生在下面填写空白函数的功能代码
/*按前序遍历顺序建立一棵3度树,返回树根地址 */
tree CreateTree(){
// 请在这里填写代码
/****************begin***********/
datatype data;
tree t;
scanf("%c", &data);
if (data == '#') { // 使用'#'作为空节点的标志
t = NULL;
} else {
t = (tree)malloc(sizeof(node));
t->data = data;
for (int i = 0; i < m; ++i) {
t->child[i] = CreateTree(); // 递归创建子树
}
}
return t;
/****************end************/
}
/* t为指向树根结点的指针,输出树的前序遍历序列,字符之间不含空格*/
void PreOrder(tree t){
// 请在这里填写代码
/****************begin***********/
if (t != NULL) {
cout << t->data; // 输出当前节点
for (int i = 0; i < m; ++i) {
PreOrder(t->child[i]); // 递归遍历子树
}
}
/****************end************/
}
/* t为指向树根结点的指针,输出树的后序遍历序列,字符之间不含空格*/
void PostOrder(tree t){
// 请在这里填写代码
/****************begin***********/
if (t != NULL) {
for (int i = 0; i < m; ++i) {
PostOrder(t->child[i]); // 递归遍历子树
}
cout << t->data; // 输出当前节点
}
/****************end************/
}
2万+

被折叠的 条评论
为什么被折叠?



