按照先序遍历创建一棵二叉树。空树以‘#’表示。 并分别按先序遍历、中序遍历和后序遍历分别输出二叉树的数据。用c++编写
时间: 2024-11-25 11:18:21 浏览: 54
在C++中,我们可以使用递归的方式按照先序遍历(根节点 -> 左子树 -> 右子树)来创建二叉树,并打印其先序、中序和后序遍历的结果。首先,我们定义一个简单的二叉树节点结构:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
然后,我们可以使用递归函数来创建并遍历二叉树:
```cpp
void preorderTraversal(TreeNode* root, vector<int>& result) {
if (root == nullptr) {
result.push_back('#');
return;
}
result.push_back(root->val);
preorderTraversal(root->left, result);
preorderTraversal(root->right, result);
}
void inorderTraversal(TreeNode* root, vector<int>& result) {
if (root == nullptr) {
return;
}
inorderTraversal(root->left, result);
result.push_back(root->val);
inorderTraversal(root->right, result);
}
void postorderTraversal(TreeNode* root, vector<int>& result) {
if (root == nullptr) {
return;
}
postorderTraversal(root->left, result);
postorderTraversal(root->right, result);
result.push_back(root->val);
}
```
为了从一个给定的序列构建二叉树,你可以提供一个已排序的数组,比如这样:
```cpp
int main() {
// 示例输入,假设输入的是先序遍历结果
vector<int> preOrder = {1, 2, 4, 5, 3, 6, 7};
// 创建二叉树
TreeNode* root = buildTree(preOrder.begin(), preOrder.end());
// 打印先序、中序和后序遍历结果
vector<int> resPre, resIn, resPost;
preorderTraversal(root, resPre);
inorderTraversal(root, resIn);
postorderTraversal(root, resPost);
cout << "Preorder traversal: ";
for (int i : resPre) {
cout << i << " ";
}
cout << endl;
cout << "Inorder traversal: ";
for (int i : resIn) {
cout << i << " ";
}
cout << endl;
cout << "Postorder traversal: ";
for (int i : resPost) {
cout << i << " ";
}
cout << endl;
return 0;
}
```
这里`buildTree`是一个辅助函数,用于根据先序遍历重建二叉树,由于空间有限,我就不在这里展示了。
阅读全文
相关推荐


















