给你一个嵌套的整数列表 nestedList 。每个元素要么是一个整数,要么是一个列表;该列表的元素也可能是整数或者是其他列表。请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数。
实现扁平迭代器类 NestedIterator :
NestedIterator(List
int next() 返回嵌套列表的下一个整数。
boolean hasNext() 如果仍然存在待迭代的整数,返回 true ;否则,返回 false 。
你的代码将会用下述伪代码检测:
initialize iterator with nestedList
res = []
while iterator.hasNext()
append iterator.next() to the end of res
return res
如果 res 与预期的扁平化列表匹配,那么你的代码将会被判为正确。
示例 1:
输入:nestedList = [[1,1],2,[1,1]]
输出:[1,1,2,1,1]
解释:通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。
- /**
- * // This is the interface that allows for creating nested lists.
- * // You should not implement it, or speculate about its implementation
- * class NestedInteger {
- * public:
- * // Return true if this NestedInteger holds a single integer, rather than a nested list.
- * bool isInteger() const;
- *
- * // Return the single integer that this NestedInteger holds, if it holds a single integer
- * // The result is undefined if this NestedInteger holds a nested list
- * int getInteger() const;
- *
- * // Return the nested list that this NestedInteger holds, if it holds a nested list
- * // The result is undefined if this NestedInteger holds a single integer
- * const vector
&getList() const; - * };
- */
- class NestedIterator {
- private:
- vector<int> vals;
- vector<int>::iterator cur;
-
- void dfs(const vector
&nestedList) { - for (auto &nest : nestedList) {
- if (nest.isInteger()) //是整数,就添加到结果数组里
- {
- vals.push_back(nest.getInteger());
- }
- else //是列表,就继续递归
- {
- dfs(nest.getList());
- }
- }
- }
-
- public:
- NestedIterator(vector
&nestedList) { - dfs(nestedList);
- cur = vals.begin();//迭代器指向结果数组的第一个元素
- }
-
- int next() {
- return *cur++;
- }
-
- bool hasNext() {
- return cur != vals.end();//vals.end()指向数组最后一个元素的后一个位置
- }
- };
- /**
- * Your NestedIterator object will be instantiated and called as such:
- * NestedIterator i(nestedList);
- * while (i.hasNext()) cout << i.next();
- */
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:3
- /*
- // Definition for a Node.
- class Node {
- public:
- int val;
- vector
children; - Node() {}
- Node(int _val) {
- val = _val;
- }
- Node(int _val, vector
_children) { - val = _val;
- children = _children;
- }
- };
- */
-
- class Solution {
- public:
- int maxDepth(Node* root) {
- if(root==nullptr)
- return 0;
- int res=0;
- for(Node* child:root->children)
- {
- res=max(res,maxDepth(child));
- }
- return res+1;
- }
- };