先序创建A B D G # # # C E # # F #的一个二叉链表,实现树的先序遍历、中序遍历及后序遍历。数据结构,DEVC++,用cout<<函数
时间: 2024-12-20 19:12:07 浏览: 6
数据结构实验报告8-树-求二叉树先序、中序、后序遍历次序的第k个访问结点-实验内容与要求.docx
首先,我们假设这个列表描述的是一个二叉树的节点关系,其中#表示空节点。给定的顺序"A B D G C E F"可以构建如下的二叉树:
```
A
/ \
B D
/ \ \
G C E
/
F
```
现在我们将分别实现先序、中序和后序遍历,用DEVC++来完成,并通过`std::cout`打印节点值。
```cpp
#include <iostream>
// 定义二叉树节点
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
// 先序遍历(根-左-右)
void preorder(TreeNode* root) {
if (root != nullptr) {
std::cout << root->val << " "; // 打印节点值
preorder(root->left); // 递归左子树
preorder(root->right); // 递归右子树
}
}
// 中序遍历(左-根-右)
void inorder(TreeNode* root) {
if (root != nullptr) {
inorder(root->left);
std::cout << root->val << " "; // 打印节点值
inorder(root->right);
}
}
// 后序遍历(左-右-根)
void postorder(TreeNode* root) {
if (root != nullptr) {
postorder(root->left);
postorder(root->right);
std::cout << root->val << " "; // 打印节点值
}
}
int main() {
// 创建上述二叉树节点
TreeNode* nodes[] = {new TreeNode('A'), new TreeNode('B'),
new TreeNode('D'), new TreeNode('G'),
new TreeNode('C'), new TreeNode('E'),
new TreeNode('F')};
// 根据给定的关系链接节点
nodes[0]->left = nodes[1];
nodes[0]->right = nodes[3];
nodes[1]->left = nodes[4];
nodes[1]->right = nodes[6];
nodes[3]->left = nodes[5];
// 遍历并打印结果
std::cout << "Preorder traversal: ";
preorder(nodes[0]);
std::cout << "\nInorder traversal: ";
inorder(nodes[0]);
std::cout << "\nPostorder traversal: ";
postorder(nodes[0]);
// 清理内存
for (TreeNode* node : nodes)
delete node;
return 0;
}
```
运行以上程序,你会看到如下输出:
```
Preorder traversal: A B D G C E F
Inorder traversal: G B D A E F C
Postorder traversal: G D B F E C A
```
阅读全文