Given the
rootof a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level).
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: [[3],[9,20],[15,7]]Example 2:
Input: root = [1] Output: [[1]]Example 3:
Input: root = [] Output: []
Constraints:
- The number of nodes in the tree is in the range
[0, 2000]. -1000 <= Node.val <= 1000
A:
---------------简单的dfs, 每当看见一个节点,就加到结果上-----------------/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/class Solution {public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;helper(res, root, 0);return res;}private:void helper(vector<vector<int>>& res, TreeNode* root, int depth) {if (!root)return;if (depth == res.size()) {vector<int> a;res.push_back(a);}res[depth].push_back(root->val);helper(res, root->left, depth + 1);helper(res, root->right, depth + 1);}};
----------------------------第二遍,-------每次取下来一层, 放到一个Node 的list里, 同时保留Integer的一层---------------------
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> all = new LinkedList();
if(root == null)
return all;
List<TreeNode> lastLevel = new LinkedList();
List<Integer> l = new LinkedList();
lastLevel.add(root);
l.add(root.val);
all.add(l);
while(lastLevel.isEmpty() ==false){
l = new LinkedList();
List<TreeNode> newLevel = new LinkedList();
for(TreeNode node:lastLevel){
if( node.left !=null ){
newLevel.add(node.left);
l.add(node.left.val);
}
if( node.right !=null){
newLevel.add(node.right);
l.add(node.right.val);
}
}
lastLevel = newLevel;
if(l.isEmpty()==false)
all.add(l);
}
return all;
}
}
Mistakes:
1: 考虑到 stack的特性, 我们在加入的时候,要先push right child ,then left
2 艹~~~~~~~~~ BFS 是用Queue, 而不是stack, TNND
3: 每次要在while里重新new一个List, 单纯的clear()的话, ----由于其指针特性,会把all里的结果都clear掉
Learned:
1: 经常出现错误说“cannot create a generic array of .......”
Because of how generics in Java work, you cannot directly create an array of a generic type (such as
Map<String, Object>[]). Instead, you create an array of the raw type (Map[]) and cast it to Map<String, Object>[]. This will cause an unavoidable (but suppressible) compiler warning.This should work for what you need:
You may want to annotate the method this occurs in with @SupressWarnings("unchecked"), to prevent the warning from being shown. |
还有一个办法,就是 在new 的时候,不加generic type, 例如: 直接也不进行上面的cast
Stack<TreeNode>[] twoStack = new Stack[2];
3: Queue is an Interface not a class. , so,we cannot use them as class.
Instead, we need use LinkedList or PriorityQueue and etc to simulate it.

No comments:
Post a Comment