二叉樹的層次遍歷

給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:
給定二叉樹: [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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章