已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的横向显示

题目描述

已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的横向显示。

案例代码

要实现二叉树的横向显示,可以使用递归遍历二叉树,并在每个节点处添加适当数量的空格来表示层次结构。

下面是一个示例的 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
喜欢就支持一下吧
点赞5赞赏 分享