c++设计算法将按顺序方式存储在数组中的二叉树转换为二叉链表形式空节点用表示参数 c 为题意中给出的字符串数组的首地址参数 n 为数组的大小不使用队列
下面是一个将按顺序方式存储在数组中的二叉树转换为二叉链表形式的算法:
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* convertToBinaryTree(char* c, int n) {
if (n == 0) return NULL;
vector<TreeNode*> nodes(n, NULL);
for (int i = 0; i < n; i++) {
if (c[i] != '.') {
nodes[i] = new TreeNode(c[i]);
}
}
int j = 1;
for (int i = 0; i < n && j < n; i++) {
if (nodes[i] != NULL) {
nodes[i]->left = nodes[j++];
if (j < n) {
nodes[i]->right = nodes[j++];
}
}
}
return nodes[0];
}
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
int main() {
char c[] = {'A', 'B', 'C', '.', 'D', '.', '.', 'E'};
int n = sizeof(c) / sizeof(c[0]);
TreeNode* root = convertToBinaryTree(c, n);
inorderTraversal(root);
return 0;
}
在这个算法中,我们首先创建一个大小为n的节点数组nodes,并将数组中的非空字符创建为对应的节点。然后,我们使用两个指针i和j来遍历节点数组,将每个节点的左子节点和右子节点指向数组中的下一个节点。最后,我们返回根节点。
在main函数中,我们创建一个测试数组c,并将其转换为二叉链表形式。然后,我们使用中序遍历来打印二叉链表的节点值。
输出结果为:B A D C E,表示二叉链表的中序遍历结果。
注意:这个算法假设输入的数组中的节点按照从上到下、从左到右的顺序存储,并且空节点用.表示
原文地址: https://www.cveoy.top/t/topic/ixW5 著作权归作者所有。请勿转载和采集!