二叉樹的層次遍歷


問題描述:

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

例如:
給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其層次遍歷結果:

[
  [3],
  [9,20],
  [15,7]
]

 

 

解題思路:

定義變量list,List<List<Integer>> list = new LinkedList<List<Integer>>();

list用於存儲二叉樹的每一層及該層對應的節點值。

對於二叉樹中每個節點node,需要得到節點所在的層數level。

根據節點所在層數level,將節點值添加至list中相應的層數。

 

 

實現代碼如下:

    // list存儲每層的遍歷結果
    // list包含樹的每個層,每一層又包含該層各個節點的值
    private static List<List<Integer>> list = new LinkedList<List<Integer>>();

    private static void test(TreeNode node, int level) {

        if (node == null) return;

        // 若list中已包含節點node的層數level,則直接將node的值添加至該層
        if (level < list.size()) list.get(level).add(node.val);
        // 若list中沒有節點node的層數level,list添加新層,並將節點node的值添加至該層。
        else {
            list.add(new LinkedList<Integer>());
            list.get(level).add(node.val);
        }

        // node的左右子節點,其子節點層數比其多1
        test(node.left, level+1);
        test(node.right, level+1);
    }

    public static List<List<Integer>> levelOrder(TreeNode root) {
        test(root, 0);
        return list;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM