LeetCode 102. Binary Tree Level Order Traversal
2016-03-02 20:28
260 查看
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; vector<int> level; if(!root) return res; queue<TreeNode*> q1,q2; q1.push(root); while(!q1.empty()){ while(!q1.empty()){ TreeNode* cur = q1.front(); q1.pop(); level.push_back(cur->val); if(cur->left) q2.push(cur->left); if(cur->right) q2.push(cur->right); } res.push_back(level); level.clear(); q1.swap(q2); } return res; } };
和之前的某题类似,维护两个queue(不是stack因为不是zigzag),q1存当前层的节点,q2存下一层节点。
另一种写法:(java)
public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if (root == null) return res; Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); while (!q.isEmpty()) { List<Integer> tmp = new ArrayList<Integer>(); int size = q.size(); for (int i = 0; i < size; ++i) { TreeNode t = q.poll(); if (t.left != null) q.offer(t.left); if (t.right != null) q.offer(t.right); tmp.add(t.val); } res.add(tmp); } return res; } }
新写法:(留坑)
public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); dfs(res,root,0); return res; } public void dfs(List<List<Integer>> list,TreeNode node,int deep){ if(node==null)return; if(list.size()==deep) list.add(new ArrayList<Integer>()); list.get(deep).add(node.val); dfs(list, node.left, deep+1); dfs(list, node.right, deep+1); } }
相关文章推荐
- Java进阶(二十三)java中long类型转换为int类型
- Java进阶(二十三)java中long类型转换为int类型
- hibernate笔记--单向多对一映射方法
- 最佳实践: 勿在 Servlet 中实现 SingleThreadModel
- Win32多线程编程学习心得
- POJ2528Mayor's posters(离散化 + 线段树)
- overflow:hidden与margin:0 auto之间的冲突
- js循环使用
- Linux搭建
- CNN中感受野的计算
- 基本sql语句
- ubutnu 14.04LTS 安装opencv2.4
- string类型的查找
- jQuery--加一行减一行
- LeetCode 173. Binary Search Tree Iterator
- js限制input只能输入有效的数字,有且只有一个小数点,第一个不能为小数点-备
- javascript、js计算两个日期之间的天数
- Overlaying the Action Bar --1.1.4
- 深入探讨 Java 类加载器【转】
- guava学习笔记-集合