C++要求有main函数,包括create链表(参考期中考试) 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。 要二叉树的深度指的是这棵树有几层,比如下面的例子深度为4,也就是需要返回1个包含4个链表的
时间: 2024-03-07 21:47:29 浏览: 21
数组。
好的,让我来回答你的问题。
首先,我们需要定义一个二叉树的节点类,包括节点的值、左右子节点指针。然后,我们可以用递归的方式遍历每一个深度上的节点,并将它们插入到对应深度的链表中。
下面是一个参考实现:
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 二叉树节点类
class TreeNode {
public:
int val; // 节点的值
TreeNode* left; // 左子节点指针
TreeNode* right; // 右子节点指针
TreeNode(int val) {
this->val = val;
this->left = nullptr;
this->right = nullptr;
}
};
// 遍历二叉树,将每个深度上的节点插入到对应深度的链表中
void createLevelLinkedList(TreeNode* root, vector<queue<TreeNode*>>& lists, int level) {
if (root == nullptr) {
return;
}
// 创建新的链表
if (lists.size() == level) {
queue<TreeNode*> q;
lists.push_back(q);
}
// 将当前节点插入到链表尾部
lists[level].push(root);
// 递归处理左右子树
createLevelLinkedList(root->left, lists, level + 1);
createLevelLinkedList(root->right, lists, level + 1);
}
// 创建含有某一深度上所有节点的链表
vector<queue<TreeNode*>> createLevelLinkedList(TreeNode* root) {
vector<queue<TreeNode*>> lists;
createLevelLinkedList(root, lists, 0);
return lists;
}
// 测试代码
int main() {
// 创建二叉树
TreeNode* root = new TreeNode(1);
TreeNode* node1 = new TreeNode(2);
TreeNode* node2 = new TreeNode(3);
TreeNode* node3 = new TreeNode(4);
TreeNode* node4 = new TreeNode(5);
TreeNode* node5 = new TreeNode(6);
TreeNode* node6 = new TreeNode(7);
root->left = node1;
root->right = node2;
node1->left = node3;
node1->right = node4;
node2->left = node5;
node2->right = node6;
// 创建含有某一深度上所有节点的链表
vector<queue<TreeNode*>> lists = createLevelLinkedList(root);
// 输出结果
for (int i = 0; i < lists.size(); i++) {
cout << "Depth " << i << ": ";
while (!lists[i].empty()) {
cout << lists[i].front()->val << " ";
lists[i].pop();
}
cout << endl;
}
return 0;
}
```
这个实现中,我们用了一个 `vector<queue<TreeNode*>>` 来保存每个深度上的链表。在 `createLevelLinkedList` 函数中,我们使用递归的方式遍历每个深度上的节点,并将它们插入到对应深度的链表中。在创建新链表的时候,我们使用了一个 `if` 语句来判断当前深度是否已经存在链表,如果不存在就新建一个链表。
最后,在主函数中,我们遍历所有深度上的链表,并输出它们的值。