剑指Offer:二叉树打印成多行【23】

剑指Offer:二叉树打印成多行【23】

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

题目分析

  

Java题解

package tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class PrintByLevel {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(5);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;
    }
    static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> re = new ArrayList<>();
        if (pRoot==null)
            return re;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        int nextLevel =0;
        int toBePrinted = 1;
        ArrayList<Integer> cuLevel = new ArrayList<>();

        while (!queue.isEmpty())
        {
            TreeNode tmp = queue.poll();
            cuLevel.add(tmp.val);
            if(tmp.left!=null)
            {
                queue.add(tmp.left);
                nextLevel++;
            }
            if(tmp.right!=null)
            {
                queue.add(tmp.right);
                nextLevel++;
            }
            toBePrinted--;
            if(toBePrinted==0)
            {
                re.add(cuLevel);
                cuLevel = new ArrayList<>();
                toBePrinted = nextLevel;
                nextLevel=0;
            }

        }
        return re;
    }
}

  

原文地址:https://www.cnblogs.com/MrSaver/p/9321112.html

时间: 2024-08-10 02:09:31

剑指Offer:二叉树打印成多行【23】的相关文章

剑指offer---把二叉树打印成多行

题目:把二叉树打印成多行 要求:从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<vector<int> > Print(TreeN

60、剑指offer--把二叉树打印成多行

题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路:可以直到,每次打印一个结点,然后打印下一行时总是先打印其左子结点,然后打印其右子结点.先入先出,使用队列处理.使用toBeprint记录当前行打印的个数,每存入一个-1:nextlevel记录下一行打印结点个数:一行打印完,toBeprint = nextlevel:nextlevel = 0: 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *lef

把二叉树打印成多行-剑指Offer

把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 思路 都是从左往右打印,我们可以使用队列 若要一行一行区别开来打印,我们可以用两个队列 也可以用一个队列,然后用两个标志位来标注哪些是属于一行里的结点,一个指针指向下一行的最后一个进队列的(point),一个指针指向上一行最后一个进入队列的(end),当出队列到end时,打印上一行,然后把end指针下移到下一行point处,继续循环打印 代码 import java.util.ArrayList; i

剑指OFFER之打印1到最大的N位数(九度OJ1515)

题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案例,输入一个数字N(1<=N<=5). 输出: 对应每个测试案例,依次打印从1到最大的N位数. 样例输入: 1 样例输出: 1 2 3 4 5 6 7 8 9 解题思路: 直接通过n快速指定比最大的那个数大1的数,10,100,1000,10000,100000.... 输出,就行了... 代码: #include <stdio.h> int main(void){ int

剑指offer (20) 打印螺旋矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; int nRows = matrix.size(); if (nRows == 0) return result; int nCols = matrix.at(0).size()

剑指offer (12) 打印1到最大的n位数

题目描述: 给定一个数字N,打印从1到最大的N位数 此题需要注意以下几点: 1. 涉及到大数问题,因为并没有限定 n的取值范围,所以需要采取 字符数组模拟大数运算 2. 打印数字时 需要忽略前置0 3. 我们始终 以n位数为整体,n位所有十进制数其实是 n位从0到9的全排列,可以采用递归解决 我们从 数组下标0开始 (对应于数字最高位),每一位都有0到9取值,然后设置下一位,递归的结束条件是 设置位到了数组的最末端 1 void PrintNum(char* num) 2 { 3 char* c

剑指offer 顺时针打印矩阵

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路:一定要记住循环继续的条件是columns > start * 2,rows > start * 2; 一圈的打印分为四步: 第一步:无条件打印第一行,从左往右: 第二步:终止行号大于起始行号,打印最后一列,从上往下: 第

剑指offer(五十一)之把二叉树打印成多行

题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 代码: <span style="color:#000099;">import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val

剑指offer系列49:把二叉树打印成多行

有了上一个之字形打印二叉树,这个题就比较简单了. 首先分析这道题的结构,一行一行的输出. 1.如果第一行顺序存储,也就是先存左边在存右边.那么输出的时候也要同样的先左边后右边的顺序.这就是先进先出,所以用队列. 2.如果不顺序存,使用栈来存.第二行就先右边在左边,必须这样第一行输出的时候才可以先左后右.存第三行是根据第二行的弹出顺序决定的.因为第二行的弹出顺序是从左向右,所以第三行的第一个元素必须是第二行左边元素的子树.也就是在栈底.也就是说第三行开始的元素放在栈底只能最后输出,这样必然是不对的