c++设计算法将按顺序方式存储在数组中的二叉树转换为二叉链表形式空节点用表示
以下是将按顺序方式存储在数组中的二叉树转换为二叉链表形式的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 著作权归作者所有。请勿转载和采集!