給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其層次遍歷結果:
[ [3], [9,20], [15,7] ]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();//隊列裏面存放結點
List<List<Integer>> result = new ArrayList<List<Integer>>();
//如果爲空樹就直接返回
if(root == null){
return result;
}
queue.offer(root);//根節點先入隊
//只要隊列非空就一直循環;
while (!queue.isEmpty()){
int levelNum = queue.size();//獲取當前層的節點數.
List<Integer> subList = new ArrayList<>();
//遍歷當前層結點
for(int i=0; i<levelNum; i++){
//隊首出隊並將value加入子list
TreeNode node = queue.poll();
subList.add(node.val);
//將非空左右子樹加入queue
if(node.left != null){//如果隊首的左結點不爲空就把左結點入隊
queue.offer(node.left);
}
if(node.right != null){//如果隊首的右結點不爲空就把右結點入隊
queue.offer(node.right);
}
}
result.add(subList);//添加一層
}
return result;
}
}