二叉树的树状打印输出
时间: 2024-06-20 17:04:07 浏览: 9
二叉树的树状打印输出,也称为中序遍历、前序遍历或后序遍历,是计算机科学中用于展示二叉树结构的一种常见方法。树的节点按照特定顺序被访问并打印出来,这样可以形成一个清晰的层次结构。
1. **前序遍历(Preorder Traversal)**: 先根节点,然后左子树,最后右子树。输出格式通常是 `[根节点, 左子树, 右子树]`。
2. **中序遍历(Inorder Traversal)**: 先左子树,然后根节点,最后右子树。对于二叉搜索树,这种遍历会得到排序的元素序列。输出格式通常是 `[左子树, 根节点, 右子树]`。
3. **后序遍历(Postorder Traversal)**: 先左子树,然后右子树,最后根节点。这种方法常用于计算表达式树,因为操作符通常在最右边。输出格式通常是 `[左子树, 右子树, 根节点]`。
**相关问题--:**
1. 哪种遍历方式会得到一个二叉搜索树的有序结果?
2. 中序遍历的应用场景是什么?
3. 后序遍历在什么情况下特别有用?
相关问题
二叉树的树状打印输出c++
以下是C++中二叉树的树状打印输出的代码实现:
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 获取二叉树的深度
int getDepth(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return max(leftDepth, rightDepth) + 1;
}
// 中序遍历二叉树,将节点竖向的位置保存到vector容器中
void inorder(TreeNode* root, vector<string>& res, int depth, int pos) {
if (root == NULL) {
return;
}
// 遍历左子树
inorder(root->left, res, depth + 1, pos * 2);
// 处理当前节点
string str(depth * 2, ' '); // 根据节点所在层数确定节点前面的空格数
str += to_string(root->val); // 将节点值转换为字符串
res[pos] = str; // 将节点字符串保存到vector容器中
// 遍历右子树
inorder(root->right, res, depth + 1, pos * 2 + 1);
}
// 输出二叉树
void printTree(TreeNode* root) {
if (root == NULL) {
return;
}
int depth = getDepth(root); // 获取二叉树的深度
int width = (1 << depth) - 1; // 根据二叉树的深度确定字符串长度
vector<string> res(width, string(depth * 2, ' ')); // 初始化vector容器
inorder(root, res, 0, 0); // 中序遍历二叉树,将节点竖向的位置保存到vector容器中
for (int i = 0; i < width; i++) {
cout << res[i] << endl; // 输出二叉树
}
}
int main() {
// 创建二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->right = new TreeNode(4);
root->right->left = new TreeNode(5);
// 输出二叉树
printTree(root);
return 0;
}
```
二叉树的树状打印输出C语言
在C语言中,可以使用递归的方式实现二叉树的树状打印输出。具体实现步骤如下:
1. 定义一个递归函数,参数为二叉树的指针和当前节点的层数。
2. 在函数中,先判断当前节点是否为空,如果是,则直接返回。
3. 对于非空节点,先递归输出右子树,再输出当前节点的值和层数。
4. 最后递归输出左子树,注意层数加1。
下面是具体的实现代码:
```c
#include <stdio.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void printTree(TreeNode* root, int level) {
if (root == NULL) {
return;
}
printTree(root->right, level + 1);
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("%d\n", root->val);
printTree(root->left, level + 1);
}
int main() {
// 构造一个二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
TreeNode* node1 = (TreeNode*)malloc(sizeof(TreeNode));
node1->val = 2;
TreeNode* node2 = (TreeNode*)malloc(sizeof(TreeNode));
node2->val = 3;
TreeNode* node3 = (TreeNode*)malloc(sizeof(TreeNode));
node3->val = 4;
TreeNode* node4 = (TreeNode*)malloc(sizeof(TreeNode));
node4->val = 5;
root->left = node1;
root->right = node2;
node1->left = node3;
node1->right = node4;
node2->left = NULL;
node2->right = NULL;
node3->left = NULL;
node3->right = NULL;
node4->left = NULL;
node4->right = NULL;
// 打印二叉树
printTree(root, 0);
return 0;
}
```
以上代码输出如下结果:
```
5
2
4
1
3
```
可以看到,输出的结果是树状的,每个节点的左子树在上面,右子树在下面,节点的值在中间。
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)