LintCode | 69. 二叉樹的層次遍歷

給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問)


/**
 * 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);
        }
    }
}
發佈了84 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章