博客
关于我
按之字形顺序打印二叉树
阅读量:412 次
发布时间:2019-03-06

本文共 1233 字,大约阅读时间需要 4 分钟。

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推

解题思路

这道题可以借助两个栈来实现,用文字不好描述,也许直接看代码会好一些

import java.util.ArrayList;import java.util.Stack;public class Solution {    public ArrayList
> Print(TreeNode pRoot) { // 用来存放结点 ArrayList
> list = new ArrayList<>(); if(pRoot == null) { return list; } // 判断奇偶层 int layer = 1; // 存放奇数层结点 Stack
s1 = new Stack<>(); // 存放偶数层结点 Stack
s2 = new Stack<>(); // 先把根结点放入奇数层 s1.push(pRoot); // 如果两个栈都为空,那么就证明所有结点都已遍历完毕 while(!s1.empty() || !s2.empty()) { // 当前层是奇数层 if(layer % 2 != 0) { // 存放奇数层的结点 ArrayList
temp = new ArrayList<>(); // 把奇数层的结点逐个弹出,用 temp 保存起来 // 同时把每个弹出结点的左右子结点压入栈 // 要注意栈的特点是后进先出,因此出栈顺序和入栈顺序是相反的 while(!s1.empty()) { TreeNode node = s1.pop(); if(node != null) { temp.add(node.val); s2.push(node.left); s2.push(node.right); } } if(!temp.isEmpty()) { list.add(temp); layer++; } } else { // 原理同上 ArrayList
temp = new ArrayList<>(); while(!s2.empty()) { TreeNode node = s2.pop(); if(node != null) { temp.add(node.val); s1.push(node.right); s1.push(node.left); } } if(!temp.isEmpty()) { list.add(temp); layer++; } } } return list; }}

转载地址:http://vwnkz.baihongyu.com/

你可能感兴趣的文章
MySQL高级-视图
查看>>
MySQL高级-触发器
查看>>
mysql高级查询~分页查询
查看>>
MySQL高频面试题
查看>>
MySQL高频面试题的灵魂拷问
查看>>
MySQL(2)DDL详解
查看>>
Mysql,sql文件导入和导出
查看>>
MYSQL:int类型升级到bigint,对PHP开发语言影响
查看>>
Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
查看>>
MySQL:MySQL执行一条SQL查询语句的执行过程
查看>>
Mysql:SQL性能分析
查看>>
mysql:SQL按时间查询方法总结
查看>>
MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
查看>>
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
查看>>
Mysql:避免重复的插入数据方法汇总
查看>>
M_Map工具箱简介及地理图形绘制
查看>>
m_Orchestrate learning system---二十二、html代码如何变的容易
查看>>
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>