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] ]java程序:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
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>> answerList = new ArrayList<List<Integer>>();
TreeNode nextLevelStarter;
Queue<TreeNode> q = new LinkedList<TreeNode>();
if(root==null)return answerList;
q.add(root);
while(!q.isEmpty()){
List<Integer> thisLevelList = new ArrayList<Integer>();
nextLevelStarter=null;
//没有找到下一层的开始结点时,继续遍历
while(q.peek()!=nextLevelStarter){
TreeNode currentNode = q.remove();
//如果nextLevelStarter值为空,说明还没找到下一层的起始节点
//那么就查看当前遍历的节点的孩子是否为空,不为空就是下一层的起始节点
if(nextLevelStarter==null){
if(currentNode.left!=null){
nextLevelStarter=currentNode.left;
}else if(currentNode.right!=null){
nextLevelStarter=currentNode.right;
}
}
thisLevelList.add(currentNode.val);
if(currentNode.left!=null){
q.add(currentNode.left);
}
if(currentNode.right!=null){
q.add(currentNode.right);
}
}
answerList.add(thisLevelList);
}
return answerList;
}
}
总结:平日应该多多应用数据结构,活学活用,想好思路慢慢练习自然不会觉得很困难了。