給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問)
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(root != null) {
ArrayList<Integer> first = new ArrayList<Integer>();
list.add(first);
first.add(root.val);
//遞歸調用
traverse(list, root.left, 1);
traverse(list, root.right, 1);
}
return list;
}
/**
* @param list: 通過參數傳遞來實現訪問list
* @param node: 欲遍歷的結點
* @param level: 當前結點的level(從0開始)
*/
private void traverse(ArrayList<ArrayList<Integer>> list, TreeNode node, int level) {
ArrayList<Integer> temp = null;
//注意判空
if(node != null) {
//若list長度與當前結點所在level相同,說明該level尚未有對應ArrayList,則需創建
//否則說明已創建,直接從list取出,並添加當前結點val
if(list.size() == level) {
temp = new ArrayList<Integer>();
list.add(temp);
} else {
temp = list.get(level);
}
temp.add(node.val);
traverse(list, node.left, level + 1);
traverse(list, node.right, level + 1);
}
}
}