(能在DevC++上运行)垂直输出二叉树完整C++代码
时间: 2024-10-24 20:08:08 浏览: 59
在DevCpp上运行,你可以使用递归的方式来实现二叉树的垂直输出(也称为水平遍历或前序螺旋遍历)。下面是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 水平方向打印节点
void printRow(vector<TreeNode*>& row, int level) {
for (int i = 0; i < level; ++i)
cout << " ";
for (auto& node : row)
if (node)
cout << node->val << " ";
cout << endl;
}
// 垂直输出函数
void verticalOrder(TreeNode* root, vector<vector<int>>& result) {
if (!root) return;
result.push_back({root->val});
// 遍历左子树
verticalOrder(root->left, result);
// 打印当前层节点
printRow(result.size() - 1, 1);
// 遍历右子树
verticalOrder(root->right, result);
}
// 主函数入口
int main() {
// 创建一个示例二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
vector<vector<int>> res;
verticalOrder(root, res);
// 输出结果
for (const auto &row : res)
for (int num : row)
cout << num << " ";
return 0;
}
```
这个代码首先定义了一个二叉树结构`TreeNode`,然后创建了`verticalOrder`函数用于垂直遍历,并通过`printRow`函数辅助输出。在`main`函数里,我们构建了一个二叉树并调用了`verticalOrder`来获取结果。
注意,由于DevCpp不支持C++11及以上特性(如范围for循环),因此这里使用了传统的迭代方式。如果你希望看到更新后的版本,可能需要使用其他支持C++11的IDE,比如g++。
阅读全文