首页 > 其他分享 >【剑指offer】-把二叉树打印成多行-43/67

【剑指offer】-把二叉树打印成多行-43/67

时间:2023-05-24 15:05:10浏览次数:32  
标签:treeNode offer 队列 ArrayList 43 queue add 二叉树


1. 题目描述

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

2. 题目分析

  1. 非常经典的一道二叉树的题目,做这道题之前需要掌握二叉树的思想和BFS(广度优先搜索、队列思想)
  2. 我们可以回顾一下最基本的层次遍历,我们是用一个队列来进行存储初始root结点,然后依次放入root的左子树和右子树,循环上述操作
while (!queue.isEmpty()) {
			TreeNode treeNode = queue.poll();
			if (treeNode.left != null) {
				queue.add(treeNode.left);
			}
			if (treeNode.right != null) {
				queue.add(treeNode.right);
			}
		}
  1. 对于这道题,我们需要分层,所以我们需要考虑,怎么让一层的数字输出在同一list中,当我们把root放入队列时,目前的队列长度为1,我们按照队列的长度来进行循环queue.add(treeNode.left); queue.add(treeNode.right);,目前队列中的长度为2,我们继续按照队列的长度进行循环,依次来遍历还整个二叉树。

3. 题目代码

public class Solution {
  ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if (pRoot == null) {
            return list;
        }
        queue.offer(pRoot);
        while (!queue.isEmpty()) {
            ArrayList<Integer> list2 = new ArrayList<>();
            for (int i = queue.size(); i > 0; i--) {
                TreeNode treeNode = queue.poll();
                list2.add(treeNode.val);
                if (treeNode.left != null) {
                    queue.offer(treeNode.left);
                }
                if (treeNode.right != null) {
                    queue.offer(treeNode.right);
                }
            }
            list.add(list2);
        }
        return list;
  }
}


标签:treeNode,offer,队列,ArrayList,43,queue,add,二叉树
From: https://blog.51cto.com/u_16127529/6340836

相关文章

  • 【力扣每日一题】144. 二叉树的前序遍历
    1.题目描述2.题目解析非常典型的一道二叉树题目思路一:递归求解思路二:迭代求解3.题目代码3.1递归**publicIList<int>PreorderTraversal(TreeNoderoot){List<int>list=newList<int>();Tree(root,list);returnlist;......
  • 【剑指offer】- 求1+2+3+...+n -47/67
    1.题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。2.题目分析对于这种求1+2+3+…+n的题,我们可以采取3中方法第一种:直接利用等差数列的思想来进行求和return(1+n)*n/2;第二种:利用迭代的思想进行求和intres=......
  • 【剑指offer】- 数组中重复的数字 -48/67
    1.题目描述在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,5,3]输出:2或32.题目分析此题考查的是面试者的沟通能力,......
  • LeetCode 222. 完全二叉树的节点个数
    classSolution{public:intcountNodes(TreeNode*root){if(!root)return0;autol=root->left,r=root->right;intx=1,y=1;//记录左右两边层数while(l)l=l->left,x++;while(r)r=r->right,y++;......
  • 加分二叉树
    题目描述设一个\(n\)个节点的二叉树\(\text{tree}\)的中序遍历为\((1,2,3,\ldots,n)\),其中数字\(1,2,3,\ldots,n\)为节点编号。每个节点都有一个分数(均为正整数),记第\(i\)个节点的分数为\(d_i\),\(\text{tree}\)及它的每个子树都有一个加分,任一棵子树\(\text{subtree}\)......
  • [ABC143E] Travel by Car
    TravelbyCar的传送门\(n\le300\)可凭感觉进行一遍Floyd。然后选两个点\(i,j\),如果\(i,j\)间的距离小于等于\(l\),则将\(i,j\)连一条代价为\(1\)的边(假设\(i,j\)要用一桶油)。最后再来一遍Floyd即可。因为第一次是加满油的,所以答案要\(-1\)。#include<bit......
  • 代码随想录算法训练营第十四天|144. 二叉树的前序遍历、145. 二叉树的后序遍历、94.
    【参考链接】1.满二叉树,完全二叉树,二叉搜索树(有数值,有序树)。2.平衡二叉搜索树:又被称为AVL(Adelson-VelskyandLandis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。3.优先级队列其实是一个堆,堆就是一棵完全二叉......
  • 图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
    一、题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。二、示例2.1>示例1:【输入】root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22【输出】[[5,4,11,2],[5,......
  • 图解LeetCode——662. 二叉树最大宽度(难度:中等)
    一、题目给你一棵二叉树的根节点root,返回树的最大宽度。树的最大宽度是所有层中最大的宽度。每一层的宽度被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的null节点,这些null节点也计入长......
  • 图解LeetCode——剑指 Offer 36. 二叉搜索树与双向链表
    一、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。二、示例为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对......