二叉樹的層次遍歷

題目需求

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

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

3
/\
9 20
/\
15 7
返回其層次遍歷結(jié)果:

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

解題思路

1.廣度優(yōu)先搜索(BFS)

 public List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        List<List<Integer>> result = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node == null) continue;
                list.add(node.val);
                if (node.left != null)
                    queue.add(node.left);
                if (node.right != null)
                    queue.add(node.right);
            }
            result.add(list);
        }
        return result;
    }

2.數(shù)組填充,先將要返回的集合創(chuàng)建好, 然后采用深度優(yōu)先搜索(DFS),根據(jù)二叉樹的層級(jí),進(jìn)行填充

   public List<List<Integer>> levelOrder(TreeNode root) {


        List<List<Integer>> result = new ArrayList<>();
        dfs(result, root, 1);
        return result;
    }


    public void dfs(List<List<Integer>> result, TreeNode node, int level) {
        if (node == null) return;
        if (result.size() < level) {
            result.add(new ArrayList<>());
        }

        result.get(level - 1).add(node.val);
        dfs(result, node.left, level + 1);
        dfs(result, node.right, level + 1);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容