题目描述
已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的横向显示。
案例代码
要实现二叉树的横向显示,可以使用递归遍历二叉树,并在每个节点处添加适当数量的空格来表示层次结构。
下面是一个示例的 C 语言代码:
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的定义
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建新结点
struct TreeNode* createNode(int data) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
if (newNode == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 横向显示二叉树
void printBinaryTree(struct TreeNode* root, int level) {
if (root == NULL) {
return;
}
// 控制每层结点之间的距离
int i;
for (i = 0; i < level; i++) {
printf(" ");
}
printf("%d\n", root->data);
// 递归打印左子树和右子树
printBinaryTree(root->left, level + 1);
printBinaryTree(root->right, level + 1);
}
int main() {
// 创建二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 横向显示二叉树
printBinaryTree(root, 0);
// 释放内存
free(root->left->left);
free(root->left->right);
free(root->right->left);
free(root->right->right);
free(root->left);
free(root->right);
free(root);
return 0;
}
在上面的代码中,我们首先定义了一个TreeNode
结构体表示二叉树的结点。然后,我们实现了createNode
函数来创建新的结点。
接下来,我们定义了printBinaryTree
函数来递归地横向显示二叉树。该函数使用level
参数来跟踪当前结点的层次,然后在每个结点处打印相应数量的空格以表示层次结构。
在主函数中,我们创建了一个示例二叉树,并调用printBinaryTree
函数来显示二叉树的结构。最后,我们释放了动态分配的内存空间。
运行该程序,将会输出以下结果:
1
2
4
5
3
6
7
这样就实现了二叉树的横向显示。每个数字表示一个二叉树结点,通过缩进来表示结点的层次关系。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END