以链表为存储结构创建二叉树
时间: 2024-01-23 13:17:21 浏览: 25
可以按照以下步骤以链表为存储结构创建二叉树:
1. 定义二叉树节点结构体,包含数据域和左右子节点指针域。
2. 定义链表节点结构体,包含数据域和指向下一个节点的指针域。
3. 读入二叉树的节点数据,按照层次顺序将其存储在链表中。
4. 依次从链表中取出节点,为其创建左右子节点,并将子节点指针指向下一个节点。
5. 重复上述步骤,直到链表中所有节点都被处理。
6. 返回二叉树的根节点。
下面是创建二叉树的示例代码,其中假设链表节点数据为整型:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
TreeNode* createTree(ListNode* head) {
if (head == NULL) {
return NULL;
}
queue<TreeNode*> q;
TreeNode* root = new TreeNode(head->val);
q.push(root);
ListNode* cur = head->next;
while (!q.empty() && cur != NULL) {
TreeNode* node = q.front();
q.pop();
if (cur != NULL) {
node->left = new TreeNode(cur->val);
q.push(node->left);
cur = cur->next;
}
if (cur != NULL) {
node->right = new TreeNode(cur->val);
q.push(node->right);
cur = cur->next;
}
}
return root;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
head->next->next->next->next->next = new ListNode(6);
TreeNode* root = createTree(head);
// do something with the binary tree
return 0;
}
```