問題描述:
給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [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; }