【发布时间】:2020-01-05 14:27:04
【问题描述】:
我正在对 LeetCode 进行编码挑战,我被要求遍历每个级别,最后返回一个嵌套向量,其中包含每个值的节点值。
如果我有一棵像这样的树:
这是
输入:root = [1,null,3,2,4,null,5,6]
预期的输出是
输出:[[1],[3,2,4],[5,6]]
Node的定义如下:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
我正在尝试如下迭代解决方案:
class Solution {
public:
vector<vector<int>> answer;
stack<Node*> nodes;
vector<vector<int>> levelOrder(Node* root) {
if(root == NULL)
return answer;
nodes.push(root);
answer.push_back(vector<int>() = {root->val});
while(!nodes.empty())
{
Node* curr = nodes.top();
nodes.pop();
vector<int>temp;
for(int i = 0; i < curr->children.size(); i++)
{
nodes.push(curr->children[i]);
temp.push_back(curr->children[i]->val);
}
if(temp.size() != 0)
answer.push_back(temp);
}
return answer;
}
};
但它始终未能通过输入为的第 20 个测试用例:
[1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
期望是:
[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
我的输出是
[[1],[2,3,4,5],[9,10],[13],[8],[12],[6,7],[11],[14]]
我无法在纸上可视化和绘制这个 N 叉树,所以我很难理解我的算法哪里出错了。
【问题讨论】:
-
如果您仔细查看上面引用的示例输入和输出,您会发现根本不需要构建任何树。输出与输入中的数据系列相同,只是用
[]分组,而不是用,null分隔。但是,您必须计算属于每个级别的运行。例如,如果节点 4 有一个子节点 8,则输入将类似于 `[1,null,3,2,4,null,5,6,null,null,8]` 并且预期的输出将是 `[[ 1],[3,2,4],[5,6,8]]` - 注意树的第三行中三个运行(一个空)的串联。