以下是将按顺序方式存储在数组中的二叉树转换为二叉链表形式的C++算法:

#include <iostream>
#include <queue>
using namespace std;

// 定义二叉树结点
struct TreeNode {
    char val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};

// 将按顺序方式存储在数组中的二叉树转换为二叉链表形式
TreeNode* arrayToBinaryTree(char arr[], int n) {
    if (n == 0) {
        return NULL;
    }

    TreeNode* root = new TreeNode(arr[0]);
    queue<TreeNode*> q;
    q.push(root);

    int i = 1;
    while (!q.empty() && i < n) {
        TreeNode* curr = q.front();
        q.pop();

        if (arr[i] != '.') {
            curr->left = new TreeNode(arr[i]);
            q.push(curr->left);
        }
        i++;

        if (i < n && arr[i] != '.') {
            curr->right = new TreeNode(arr[i]);
            q.push(curr->right);
        }
        i++;
    }

    return root;
}

// 打印二叉链表形式的二叉树
void printBinaryTree(TreeNode* root) {
    if (root == NULL) {
        return;
    }

    cout << root->val << " ";
    printBinaryTree(root->left);
    printBinaryTree(root->right);
}

int main() {
    char arr[] = {'A', 'B', 'C', 'D', '.', 'E', 'F'};
    int n = sizeof(arr) / sizeof(arr[0]);

    TreeNode* root = arrayToBinaryTree(arr, n);
    printBinaryTree(root);

    return 0;
}

这段代码首先定义了一个TreeNode结构体来表示二叉树的结点。然后,arrayToBinaryTree函数接受一个字符数组和数组的大小作为输入,将按顺序方式存储在数组中的二叉树转换为二叉链表形式。该函数使用了一个队列来辅助转换过程,首先创建根结点,然后将根结点入队。接下来,从数组的第二个元素开始,每次从队列中取出一个结点,根据数组中的值创建左子结点和右子结点,并将它们入队。最后,返回根结点。

printBinaryTree函数用于打印二叉链表形式的二叉树。它使用递归的方式先序遍历二叉树,并打印每个结点的值。

main函数中,定义了一个字符数组表示按顺序方式存储在数组中的二叉树。然后,调用arrayToBinaryTree函数将数组转换为二叉链表形式的二叉树,并调用printBinaryTree函数打印二叉链表形式的二叉树。

输出结果为:A B D C E


原文地址: https://www.cveoy.top/t/topic/ixNt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录