Binary Tree Level Order Traversal II 二叉树按层遍历(反向输出)@LeetCode

LeetCode之二叉树层次遍历逆序输出(简单 二叉树) 问题描述: 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] 说是简单题,我可没觉... 阅读详情

树的Level Order Traversal加上ArrayList翻转


package Level3;

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

import Utility.TreeNode;


/**
 * Binary Tree Level Order Traversal II 
 * 
 *  Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree {3,9,20,#,#,15,7},
    3
   / \
  9  20
    /  \
   15   7
return its bottom-up level order traversal as:
[
  [15,7]
  [9,20],
  [3],
]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:
   1
  / \
 2   3
    /
   4
    \
     5
The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
 *
 */
public class S107 {

	public static void main(String[] args) {

	}

	public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
		ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
		
		if(root == null){
			return ret;
		}
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        
        ArrayList<ArrayList<Integer>> alal = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> al = new ArrayList<Integer>();
        
        // 记录两个当前level和下一个level的node数目
        int currentLevel = 1;
        int nextLevel = 0;
        
        while( !queue.isEmpty() ){
        	TreeNode cur = queue.remove();
        	currentLevel--;
        	al.add(cur.val);
        	
        	if(cur.left != null){
        		queue.add(cur.left);
        		nextLevel++;
        	}
        	if(cur.right != null){
        		queue.add(cur.right);
        		nextLevel++;
        	}
        	
        	if(currentLevel == 0){
        		alal.add(al);
        		al = new ArrayList<Integer>();
        		currentLevel = nextLevel;
        		nextLevel = 0;
        	}
        }
        
        // 翻转ArrayList
        for(int i=alal.size()-1; i>=0; i--){
        	ret.add(alal.get(i));
        }
        
        return ret;
    }

}


/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
        if(root == null){
            return ret;
        }
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        int curLevCnt = 1;
        int nextLevCnt = 0;
        ArrayList<Integer> al = new ArrayList<Integer>();
        while(!queue.isEmpty()){
            TreeNode cur = queue.remove();
            curLevCnt--;
            al.add(cur.val);
            if(cur.left != null){
                queue.add(cur.left);
                nextLevCnt++;
            }
            if(cur.right != null){
                queue.add(cur.right);
                nextLevCnt++;
            }
            
            if(curLevCnt == 0){
                curLevCnt = nextLevCnt;
                nextLevCnt = 0;
                ret.add(al);
                al = new ArrayList<Integer>();
            }
        }
        ArrayList<ArrayList<Integer>> ret2 = new ArrayList<ArrayList<Integer>>();
        for(int i=ret.size()-1; i>=0; i--){
            ret2.add(ret.get(i));
        }
        
        return ret2;
    }
}



Python3实现二叉树的逐层遍历,并将奇数层顺序输出,偶数层逆序输出 任意给定一棵二叉树,实现对二叉树的逐层遍历,并将奇数层顺序输出,偶数层逆序输出。如建立如下的二叉树: ···················root ········ ·····7 ·········· 8 ·········6 ·····2······5 ·1······3·····4 class TreeNode(object): def __init__(self,data=0,le... 阅读详情

相关推荐

二叉树反转

二叉树反转 二叉树反转常被拿来做面试题,所以掌握它是一件必须的事。 下图是二叉树的反转,看起来就像是镜像一样。 首先我们先要构建二叉树的类型 #include <iostream> using namespace std; typedef char ElemType; typedef struct node { ElemType data; //数据域 struct node* left; struct node* right; //结点的左右子树指针 } BTNode; //

qq_45858458的博客 817

第4章第1节练习题9 反向层次遍历算法

试给出二叉树的自下而上,从右到左的层次遍历算法

法海你懂不? 909

联想Y9000P安装Ubuntu20.04记录

联想Y9000P 2022安装Ubuntu20.04问题记录

Legendyyy的博客 7115

反向遍历_二叉树的锯齿形层序遍历

题目描述 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]广度优先 广度优先比较直观,就是按层次遍历我们将每...

weixin_29158413的博客 367

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 513

kubeadm init 运行时kebelet启动失败问题

解决k8s kubeadm init时遇到的kubelet问题

ZDPZN的博客 6074

二叉树中的中序遍历、反向遍历和逆序

在这里,如果我们考虑中序遍历的结果 `4, 2, 5, 1, 3`,那么逆序就是将这个序列颠倒过来,变成 `3, 1, 5, 2, 4`,即反向遍历的结果。反向遍历可以用于一些特定场景,比如在广度优先搜索中,反向遍历可以改变遍历的方向。总的来说,中序遍历是一种特定的遍历顺序,反向遍历是遍历方向相反的情况,而逆序则是将一个序列颠倒过来。对于上面的二叉树,中序遍历的结果是 `4, 2, 5, 1, 3`。总体而言,这些术语在二叉树遍历的上下文中表示不同的遍历方式或序列顺序,具体取决于应用的场景。

qq_40260394的博客 1306

Log4Shell漏洞复现:从原理到实战的完整指南

日志记录是软件开发中用于追踪应用状态和排查问题的关键技术。然而,当日志组件对用户输入进行不当解析时,可能引发严重的安全风险。Log4j2作为Java生态中广泛使用的日志框架,其Lookup功能允许在日志中动态插入变量,这一设计初衷虽为便利,却因递归解析机制埋下了隐患。攻击者通过构造特定的JNDI(Java命名和目录接口)查询字符串,可诱使应用加载并执行远程恶意代码,从而实现远程命令执行。这种漏洞的价值在于其极低的利用门槛和极高的潜在危害,常被用于渗透测试和安全评估中,以验证系统的防御能力。本文以CVE-20

weixin_30496999的博客 274

反向层次遍历二叉树

自下而上,自右向左 思想:利用原有的层次遍历序列,出队的同时将各结点指针入栈。所有结点入栈后再从栈顶开始依次访问。 具体步骤: 根结点入栈 把一个元素出队列,遍历这个元素 依次把这个元素的左、右孩子入队列。 若队列不为空,跳2,否则结束 void ...

qq_42467913的博客 515

AI开发提效10倍:从需求到部署的全流程实战指南(附Prompt模板)

用AI开发不是“偷懒”,而是把时间花在更有价值的地方——原来花80%时间写重复代码,现在用AI搞定后,能把精力放在“优化用户体验”“提升系统性能”这些核心工作上,这才是AI给开发者的真正红利。如果你还没开始用AI做开发,建议从“写一个简单接口”“补一段注释”开始尝试,先用起来再优化方法。记住:AI是工具,不是对手,学会驾驭它,你会发现开发效率提升的同时,还能告别无效加班。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1526

博士申请-考核制经验分享(2)——个人简历

申博过程中一般在联系导师时就将个人简历作为邮件附件,有些学校也会在提交材料或者复试阶段提交个人简历。

weixin_49282401的博客 5520

二叉树反向遍历

//编写一道自下而上,从右至左的二叉树层次遍历 #include<stdio.h> typedef struct BiTree() { int data; struct BiTree *lchild,*rchild; }BiTNode,*BiTree; void RelevelOrder(BiTree T) { InitStack(S); InitQueue(

Fairy 2170

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3138

Leetcode 二叉树反向层次遍历

题目描述 给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 3↵ / ↵ 9 20↵ / ↵ 15 7 该二叉树由底层到顶层层序遍历的结果是 [↵ [15,7]↵ [9,20],↵ [3],↵] 思路:采用队列层次遍历 再反向输出 vector<vector<int> > levelOrde...

一只老风铃 1386

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

二叉树水平顺序遍历level-order traversal

有个很有名的算法叫广度优先搜索(Breadth-First Search)BFS,这个算法被用于遍历或者搜索数据结构,比如树或者图。 BFS使用到树上就是level-order traversal. 进行广度优先搜索算法时,需要用到java的Queue,Queue是继承自Collection的,所以Collection中的方法都是可以用的。 Queue常用方法:offer、poll、size...

“点点”专栏 4539

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

二叉树自下而上,从右到左的层次遍历

#include &quot;stdafx.h&quot; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;cstring&amp;gt; #define max 500 struct queue { type member[max]; int tail,head; }; void initqueue(que

vivi_and_qiao的博客 3557

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

层序(level-order)列出二叉树的节点

数据结构与算法分析——c语言描述 练习4.35 答案 #include"fatal.h" #include #include using namespace std; typedef int ElementType; struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchT

wwj_bupt 2397

leetcode之binary-tree-level-order-traversal(二叉树层次遍历输出)

leetcode之binary-tree-level-order-traversal(二叉树层次遍历输出) 题目 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...

此心光明,亦复何言~ 275

打印Leetcode二叉树

介绍 这个代码能够打印Leetcode中以字符串形式显示的二叉树,方便以直观的形式查看树的结构 代码 #include <iostream> #include <vector> #include <queue> #include <cmath> using namespace std; /* * 此类用于将leetcode中string形式输出的...

愤怒的弱鸡 469

1127. ZigZagging on a Tree (30) 后序中序建树 + 反向输出层次遍历

传送门题意:给出一个树的中序和后序遍历结果,求它的Z字型层序遍历,也就是偶数层从右往左,奇数层从左往右遍历~思路:这是我那次pat考试的题目当时做出来了有点忘记了今天在回顾一下吧.具体做法见这里#include&lt;bits/stdc++.h&gt; using namespace std; const int maxn = 35; int in[maxn],post[maxn],n; str...

Marcus-Bao的个人主页 438

如何直观的打印一颗二叉树

如何直观的打印一颗二叉树 打印的结果是需要顺时针旋转90度的,如下面的结果打印出来是这样的。 如何打印呢?  需要处理以下四个问题 : 遍历树的顺序是 右子树-&amp;amp;amp;amp;gt;根-&amp;amp;amp;amp;gt;左子树 因为要 避免数字长度影响对齐的因素,所以 两边补上空格(有一个总长度可以自己确定) 在结点的两边加上特定的字符串标记区分孩子和父亲以及位置,使用 H ^ v 这个几个标记 和高度...

zxzxin的博客~ 3442

LeetCode,二叉树的层次遍历、逆转

LeetCode,二叉树层次遍历(循环)、逆二叉树(递归)

qq_45031079的博客 551

二叉树的层次遍历(逆层次遍历) LeetCode-107

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 /\ 9 20 / \ 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] 代码为: class Solution { public: vector<vec...

qq_41343545的博客 549

树-Binary Tree Level Order Traversal II(反向打印二叉树)

问题描述: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). For example: Given binary tree {3,9,20,

734

二叉树遍历:递归+非递归+逐层遍历

二叉树数据结构定义,递归遍历方法、如何消除递归 以及 按照层次逐层遍历...

pp1专栏 3107
上一篇: Search in Rotated Sorted Array 旋转数组里查找数 @LeetCode
下一篇: Populating Next Right Pointers in Each Node II 任意(非完美)二叉树添加next指针 @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值