7-1 数据结构考题 二叉树的遍历-后序 分数 25 作者 王群芳 单位 合肥师范学院 以二叉链表作存储结构,建立一棵二叉树, 输出该二叉树的后序遍历序列。 二叉链表的类型描述: typedef char ElemType; typedef struct BiNode { ElemType data; struct BiNode *lchild,*rchild; }BiNode,*BiTree; 输入格式: 输入一个二叉树的先序序列,孩子为空的位置以#替代。 输出格式: 输出该二叉树的后序遍历序列。输出的遍历序列中字符间均无间隔。 具体格式参看输出样例。 对于下图中给出的二叉树: 二叉树 输入样例: ABD##FE###CG#H##I## 输出样例: DEFBHGICA 代码长度限制 16 KB 时间限制 400 ms 内存限制
时间: 2024-03-25 16:40:17 浏览: 161
好的,我可以帮你解答这个问题。这道题目可以用递归的方式实现二叉树的后序遍历。
具体来说,对于一棵二叉树,后序遍历的顺序是先遍历左子树,再遍历右子树,最后访问根节点。因此,我们可以递归地遍历左右子树,再输出当前节点的值。
以下是代码实现:
```python
void postOrderTraversal(BiTree root) {
if (root == NULL) {
return;
}
postOrderTraversal(root->lchild); // 遍历左子树
postOrderTraversal(root->rchild); // 遍历右子树
printf("%c", root->data); // 输出当前节点的值
}
```
其中,`BiTree`是二叉树的指针类型,即`BiNode*`,`root->data`表示当前节点的值。
对于输入的先序序列,我们可以用递归的方式构建一棵二叉树。具体来说,我们先读入一个字符,如果它是`#`,说明当前节点为空,返回`NULL`;否则,创建一个新的节点,并递归构建它的左右子树。
以下是代码实现:
```python
BiTree buildTree() {
char c;
scanf("%c", &c);
if (c == '#') {
return NULL;
}
BiTree root = (BiTree)malloc(sizeof(BiNode));
root->data = c;
root->lchild = buildTree();
root->rchild = buildTree();
return root;
}
```
最后,我们调用`postOrderTraversal`函数输出后序遍历序列即可。
完整代码如下:
阅读全文