【LeetCode】Binary Tree Level Order Traversal
2014-12-19 16:04
417 查看
题目
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
return its level order traversal as:
解答
1.递归法:根据外层的List的长度size和层数level的对应的关系使用递归(详细见代码注释),代码如下:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ret=new ArrayList<List<Integer>>();
dfs(root,0,ret);
return ret;
}
//分层遍历-递归
private static void dfs(TreeNode root,int level,List<List<Integer>> ret){
if(root==null){
return;
}
//添加一个新的ArrayL表示新的一层
if(level>=ret.size()){
ret.add(new ArrayList<Integer>());
}
ret.get(level).add(root.val); //把节点添加到表示那一层的ArrayList里
dfs(root.left,level+1,ret); //递归处理下一层的左子树和右子树
dfs(root.right,level+1,ret);
}
}2.迭代法:相当于广度优先搜索,使用队列实现。队列初始化,将根节点压入队列,当队列不为空,进行如下操作:弹出一个节点,并访问其左右子节点,若左子结点或右子节点不为空,将其压入队列,同时记录当前层节点访问变化和下一层的节点数。代码如下:
---EOF---
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
解答
1.递归法:根据外层的List的长度size和层数level的对应的关系使用递归(详细见代码注释),代码如下:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ret=new ArrayList<List<Integer>>();
dfs(root,0,ret);
return ret;
}
//分层遍历-递归
private static void dfs(TreeNode root,int level,List<List<Integer>> ret){
if(root==null){
return;
}
//添加一个新的ArrayL表示新的一层
if(level>=ret.size()){
ret.add(new ArrayList<Integer>());
}
ret.get(level).add(root.val); //把节点添加到表示那一层的ArrayList里
dfs(root.left,level+1,ret); //递归处理下一层的左子树和右子树
dfs(root.right,level+1,ret);
}
}2.迭代法:相当于广度优先搜索,使用队列实现。队列初始化,将根节点压入队列,当队列不为空,进行如下操作:弹出一个节点,并访问其左右子节点,若左子结点或右子节点不为空,将其压入队列,同时记录当前层节点访问变化和下一层的节点数。代码如下:
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list=new ArrayList<List<Integer>>(); if(root==null){ return list; } Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); List<Integer> item=new ArrayList<Integer>(); int currentLevel=1; int nextLevel=0; while(!queue.isEmpty()){ TreeNode cur=queue.remove(); currentLevel--; item.add(cur.val); if(cur.left!=null){ queue.add(cur.left); nextLevel++; } if(cur.right!=null){ queue.add(cur.right); nextLevel++; } if(currentLevel==0){ list.add(item); item=new ArrayList<Integer>(); currentLevel=nextLevel; nextLevel=0; } } return list; }
---EOF---
相关文章推荐
- LeetCode 107:Binary Tree Level Order Traversal II
- leetcode-102-Binary Tree Level Order Traversal
- [Leetcode]Binary Tree Level Order Traversal II
- 【LeetCode】102 - Binary Tree Level Order Traversal
- [leetcode]Binary Tree Level Order Traversal II
- LeetCode() Binary Tree Level Order Traversal
- leetcode || 103、Binary Tree Zigzag Level Order Traversal
- LeetCode--Binary Tree Level Order Traversal
- [leetcode]103 Binary Tree Zigzag Level Order Traversal
- leetcode 102 Binary Tree Level Order Traversal
- LeetCode--Binary Tree Zigzag Level Order Traversal
- LeetCode_103 Binary Tree Zigzag Level Order Traversal
- Binary Tree Level Order Traversal II [LeetCode]
- LeetCode Binary Tree Zigzag Level Order Traversal
- LeetCode - Binary Tree Level Order Traversal II
- [leetcode] Binary Tree Level Order Traversal II
- [leetcode] Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Level Order Traversal
- LeetCode:Binary Tree Level Order Traversal I II
- Leetcode_binary-tree-level-order-traversal-ii