java二叉树蛇形遍历_剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出...

剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出

剑指 Offer 32 - III. 从上到下打印二叉树 III

Offer_32_3

题目详情

题解分析

本题我想的比较复杂,其实题目的要求只是需要遍历的结果逆序和正序交替,这个其实可以使用Collections工具类的reverse函数来实现。

这里我根据偶数层和奇数层改变了遍历的顺序,相对较复杂。

package com.walegarrett.offer;

import java.util.*;

/**

* @Author WaleGarrett

* @Date 2021/2/1 15:53

*/

/**

* 题目描述:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,

* 第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

*/

public class Offer_32_3 {

public ListListInteger levelOrder(TreeNode root) {

if(root == null)

return new ArrayList();

ListListInteger list = new ArrayList();

DequeTreeNode que = new LinkedList();

que.add(root);

boolean isOdd = true;//是否是奇数

while(!que.isEmpty()){

ListInteger current = new ArrayList();

StackTreeNode sta = new Stack();

for(int i = que.size(); i 0; i--){

TreeNode temp = que.peek();

que.poll();

current.add(temp.val);

if(isOdd){

if(temp.left != null) {

sta.add(temp.left);

}

if(temp.right != null) {

sta.add(temp.right);

}

}else{

if(temp.right != null) {

sta.add(temp.right);

}

if(temp.left != null) {

sta.add(temp.left);

}

}

}

while(!sta.empty()){

que.add(sta.pop());

}

list.add(current);

isOdd = !isOdd;//反转遍历方向

}

return list;

}

}

```java

剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出 相关文章

剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储

剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数。 以上的方法虽然可行,但是较复杂。实际每次队列里存储的就是当前层的所有结点,

剑指 Offer 32 - I. 从上到下打印二叉树 + 层次遍历二叉树

剑指 Offer 32 - I. 从上到下打印二叉树 Offer_32_1 题目描述 解题思路 这题属于简单题,考察的是我们对二叉树以及层次遍历的方法。 这里只需要使用简单的队列即可完成二叉树的层次遍历。 此外,由于这道题需要返回一个定长数组,但是我一时没有找到合适的将

leetcode-剑指43-OK

// language c// 剑指43// https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/int countDigitOne(int n){ if(n==0) return 0; if(n10) return 1;int GetWeishu(int n){int count = 0;while(n0){count++;n /=10;}return count;}i

LeetCode-剑指 Offer 二叉搜索树与双向链表

题目链接 题意 将一棵二叉搜索树的结点按照从小到大的顺序构建成一个双向链表,要求不能创建新的节点。 思路 首先很容易想到对二叉树的中序遍历可以得到升序的结点序列。 其次,维护一个头结点head,和一个始终指向当前最后一个结点的prev。 因此每在第一步

剑指offer-13 机器人运动范围

剑指offer-13 机器人运动范围 广度优先BFS 只用向下或向右 [0, 0]先入队列, 当队列不为空,shift出一个坐标。如果当前坐标满足条件,则将左右节点入队列,同时标记该节点,同时结果+1;若不满足条件,则什么都不做,跳过这轮循环。 其实跟树的遍历差不多嘛

剑指offer12 矩阵中的路径

剑指offer12 矩阵中的路径 深度优先搜索(DFS)+剪枝 DFS解析: 递归参数:矩阵行列索引 i 和 j ,目标字符在 word 中 索引 k 终止条件: 行列索引越界 当前矩阵字符与目标字符不符合(包含已访问的情况 成功条件: k = word.length - 1 递推工作: 标记当前

剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

剑指 Offer 31. 栈的压入、弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作。 package com.walegarrett.offer;/** * @Author WaleGarrett * @Date 2021/1/31 14:12 */import java.util.Arrays;import java.util.Stack;/** * 题目描述

剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值。 第二个栈主要用来维护第一个栈中的最小值,所以它里面的值都是有序的,值最小的放在栈顶。 此外,第二个栈出栈的处理有点

剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题

剑指 Offer 29. 顺时针打印矩阵 Offer_29 题目描述: 题解分析: 题目的初衷是将这道题当做一个简单题处理 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一个方向遍历时,除非遇到改变方向的情况,否则一直走下去。 需要注意

剑指 Offer 47. 礼物的最大价值 dp

地址https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/ 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。 给

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值