美文网首页
二叉树层级遍历

二叉树层级遍历

作者: 环宇飞杨 | 来源:发表于2020-04-03 01:02 被阅读0次

解题思路

递归写法

  1. 遍历时从顶点开始,每层都建立一个新的子数组,用于存放顶点的值
  2. 将左二子和右儿子的值加入到数组中
  3. 将层级++,递归到子树去执行,同时携带全局数组,逐层给level对应的数组中添加新值

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        if (root == null) return list;
        addObj(list, 0,root);
        System.out.println(list);
        return list;
    }
    public void addObj(List<List<Integer>> levels,int level,TreeNode node){
        if (levels.size() == level)
            levels.add(new ArrayList<Integer>());

        List<Integer> temp = levels.get(level);
        int a = node.val;
        temp.add(a);

        if (node.left != null) {
            addObj(levels, level+1, node.left);
        };
        if ( node.right != null) {
            addObj(levels, level+1, node.right);
        }
    }
}

队列写法

  1. 建立先进先出队列,将首节点放入(此时队列内只有一个节点)
  2. 依次移除队列中所有元素,并新建数组储存移出节点的值,同时将子节点继续拼入到队列中(此时队列有两个节点)
  3. 将数组储存到全局数组中。
  4. 如果队列不为空,那么重复执行2,3步骤
  5. 队列为空了说明所有节点都已经遍历完毕。

代码

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List list = new ArrayList<>();
        if (root == null) return list;
        LinkedList<TreeNode> deque = new LinkedList<TreeNode>();
        deque.add(root);
        while (!deque.isEmpty()) {
            int size = deque.size();
            ArrayList<Integer> tmp = new ArrayList<Integer>();
            for(int i=0;i<size;++i) {
                TreeNode t = deque.remove();
                tmp.add(t.val);
                if(t.left!=null) {
                    deque.add(t.left);
                }
                if(t.right!=null) {
                    deque.add(t.right);
                }
            }
            list.add(tmp);
        }
        return list;
    }
}

相关文章

  • 算法小结

    算法小结 1 二叉树 定义树节点形式 1.1 层序遍历 语义解析:层序遍历指的是二叉树根据层级进行遍历。 利用队列...

  • 2019-08-04-二叉树遍历算法

    1,前序遍历 2,中序遍历 3,后序遍历 4,队列层级遍历 5,计算二叉树节点数 一,首先定义一个二叉树的节点 二...

  • 大话数据结构—二叉树(十)

    1.二叉树3种递归遍历 2.层级遍历 引用原文:https://www.cnblogs.com/llguanli/...

  • 二叉树续

    199. 二叉树的右视图 层级遍历取每层最后一个

  • 面试总结算法

    二叉树镜像 最长回文子串 二叉树层级遍历 整数反转 二叉树先序遍历 二分法 连续子数组的最大和 动态规划 sync...

  • 二叉树输出第K层节点元素

    这个问题我的第一反应是应该跟 二叉树的层级遍历 有关。 定义节点 回顾一下层级遍历 使用了一个 队列,通过入列和...

  • (补)第四周算法备忘

    深度优先, DFS 前中后序遍历二叉树 典型题目 岛屿问题 八皇后问题 广度优先, BFS 层级遍历n叉树 典型题...

  • 二叉树层级遍历

    LintCode 二叉树层级遍历 解题思路:队列(先进先出) 将每层的节点插入到队列中, 然后遍历队列,再将下一层...

  • 二叉树的最大/最小深度

    给定如下二叉树, 分别返回其最大深度4, 最小深度2。 求最大深度 按照广度遍历 跟层级遍历类似,最后返回总数组的...

  • Binary Tree Level Order Traversa

    Easy 给定二叉树,返回从下至上层级遍历的节点值(从左往右,从叶到根) Example:二叉树 [3,9,20,...

网友评论

      本文标题:二叉树层级遍历

      本文链接:https://www.haomeiwen.com/subject/wxiqphtx.html