博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的层序遍历 Binary Tree Level Order Traversal
阅读量:6359 次
发布时间:2019-06-23

本文共 1480 字,大约阅读时间需要 4 分钟。

  hot3.png

问题:

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:

Given binary tree [3,9,20,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its level order traversal as:

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

解决:

① 用BFS遍历该树即可。

/**

 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution { //2ms
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root == null) return res;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(! queue.isEmpty()){
            int count = queue.size();
            List<Integer> tmp = new ArrayList<>();
            for (int i = 0;i < count ;i ++ ) {
                TreeNode node = queue.poll();
                tmp.add(node.val);
                if(node.left != null) queue.offer(node.left);
                if(node.right != null) queue.offer(node.right);
            }
            res.add(tmp);
        }
        return res;
    }
}

② 使用DFS,记录遍历到的节点所属的层。

class Solution {//1ms

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        dfs(root, 0, res);
        return res;
    }
    public void dfs(TreeNode root, int level, List<List<Integer>> res) {
        if (root == null) return;
        if (level >= res.size()) { //确保不会把额外的链表加入到res中
            res.add(new ArrayList<Integer>());
        }
        res.get(level).add(root.val);
        dfs(root.left, level + 1, res);
        dfs(root.right, level + 1, res);
    }
}

转载于:https://my.oschina.net/liyurong/blog/1539385

你可能感兴趣的文章
Codeforces 861 C Did you mean... 模拟 暴力
查看>>
近期window7x64 打补丁之后IE11x64无法启动
查看>>
铁血军事 > 铁血社会论坛 > 社会聚焦 > [原创]山东省临沭县残疾青年吴忠军 [原创]山东省临沭县残疾青年吴忠军...
查看>>
第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
查看>>
蛇形矩阵
查看>>
nodejs npm install全局安装和本地安装的区别
查看>>
蓝桥杯十六进制转八进制
查看>>
shouldComponentUpdate 是做什么的,(react 性能优化是哪个周期函数?)
查看>>
react-container-query
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>
SDN第三次作业
查看>>
上传和设置Mime类型
查看>>
简单的二级目录 操作
查看>>
Linux之prink原理
查看>>
js 创建Date对象5种方式
查看>>
UVA11270 Tiling Dominoes(轮廓线动态规划)
查看>>
HDU Problem—2124 Repair the Wall 【贪心】
查看>>
Light oj 1148 - Mad Counting【模拟】
查看>>
Sqlserver2008日志压缩
查看>>
hdu 2874 Connections between cities (并查集+LCA)
查看>>