美文网首页
32-打印二叉树

32-打印二叉树

作者: 一方乌鸦 | 来源:发表于2020-05-06 09:13 被阅读0次
  1. 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
public class Solution {
    public ArrayList<Integer> topToBottom(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<>();
        if (root == null) return list;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            list.add(node.val);
            if (node.left != null) queue.offer(node.left);
            if (node.right != null) queue.offer(node.right);
        }
        return list;
    }
}

2.如果需要每一层分开

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new LinkedList<>();
        if (root == null) return res;
        LinkedList<TreeNode> nodes = new LinkedList<>();

        nodes.offer(root);
        while(!nodes.isEmpty()) {
            List<Integer> tmp = new LinkedList<>();
            for (int i = nodes.size();i > 0; i--) {
                TreeNode node = nodes.poll();
                tmp.add(node.val);
                if (node.left != null)  {
                    nodes.offer(node.left);
                }
                if (node.right != null)  {
                    nodes.offer(node.right);
                }
            }
            res.add(tmp);
        }
        return res;
    }
}

3.如果需要按照之字形

class Solution {
    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);
        boolean forward = true;

        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> list = new ArrayList<>();

            for (int i = 0; i < size; i++) {
                TreeNode cur = queue.poll();
                if (forward) {
                    list.add(cur.val);
                } else {
                    list.add(0, cur.val);
                }
                if (cur.left != null) queue.offer(cur.left);
                if (cur.right != null) queue.offer(cur.right);
            }
            forward = !forward;
            res.add(list);
        }

        return res;
    }
}

相关文章

  • 剑指offer66题

    数据结构类题目 Tree 32-之字形打印二叉树[https://leetcode-cn.com/problems...

  • 32-打印二叉树

    从上往下打印出二叉树的每个节点,同层节点从左至右打印。 2.如果需要每一层分开 3.如果需要按照之字形

  • JZ-022-从上往下打印二叉树

    从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目链接: 从上往下打印二叉树...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 算法(3)层次顺序遍历二叉树

    问题:按照层次顺序遍历二叉树,每层换行打印 1、普通的按层打印二叉树只需要使用队列就可以了2、按层打印二叉树,需要...

  • 算法与数据结构

    二叉树 1. 二叉树打印练习题 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,...

  • 23 从上到下遍历二叉树 树的层次遍历

    从上往下打印二叉树 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路: 经典题目,树的...

  • 剑指offer(Java版)day05:从上往下打印二叉树|二叉

    1从上往下打印二叉树 【题目】从上往下打印出二叉树的每个节点,同层节点从左至右打印。 【考察点】举例让抽象具体...

  • 【直通BAT】剑指Offer-经典试题整理(4)

    32.1 不分行从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解法 先将根...

网友评论

      本文标题:32-打印二叉树

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