给定一棵二叉树,以二叉链表存储,要求输出后序遍历该二叉树得到的序列。 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。 int main() { Bitnode *t; int n; cin>>n; while(n--) { t=CreatBitree_level(); postorder(t); cout<<endl; } return 0; } 输入 输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树结点的值均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替) 输出 输出每棵二叉树的后序遍历序列,每个结点值之前有一个空格。 样例输入 2 1 -1 1 2 0 3 4 -1 样例输出 1 3 4 2 1C语言代码
时间: 2024-02-15 11:02:56 浏览: 83
使用链表存储二叉排序树并实现遍历算法(完全可用版)
```
#include <iostream>
#include <stack>
using namespace std;
struct Bitnode {
int data;
Bitnode *lchild, *rchild;
};
Bitnode* CreatBitree_level() {
int data;
cin >> data;
if (data == 0 || data == -1) {
return NULL;
}
Bitnode* root = new Bitnode;
root->data = data;
root->lchild = CreatBitree_level();
root->rchild = CreatBitree_level();
return root;
}
void postorder(Bitnode* root) {
if (root == NULL) {
return;
}
stack<Bitnode*> s1, s2;
s1.push(root);
while (!s1.empty()) {
Bitnode* node = s1.top();
s1.pop();
s2.push(node);
if (node->lchild != NULL) {
s1.push(node->lchild);
}
if (node->rchild != NULL) {
s1.push(node->rchild);
}
}
while (!s2.empty()) {
cout << s2.top()->data << " ";
s2.pop();
}
}
int main() {
Bitnode *t;
int n;
cin >> n;
while(n--) {
t = CreatBitree_level();
postorder(t);
cout << endl;
}
return 0;
}
```
阅读全文