博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按之字形顺序打印二叉树
阅读量:5747 次
发布时间:2019-06-18

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

按之字形顺序打印二叉树

题目描述

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

思路

  1. 根据题意,每行的节点的访问顺序是相反的,我们可以用两个栈来隔行存储,一个栈中根据“左结点->右结点”的顺序访问另一个栈的栈顶元素,而另一个栈根据“右子树->左子树”的顺序访问另一个栈的栈顶元素,直到两个栈都为空

代码

import java.util.ArrayList;import java.util.Stack;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList
> Print(TreeNode pRoot) { ArrayList
> result = new ArrayList
>(); if (pRoot == null) { return result; } Stack
stack1 = new Stack
(); Stack
stack2 = new Stack
(); ArrayList
list = new ArrayList
(); list.add(pRoot.val); result.add(list); stack1.push(pRoot); while (stack1.isEmpty() || stack2.isEmpty()) { if (stack1.isEmpty() && stack2.isEmpty()) { break; } ArrayList
temp = new ArrayList
(); if (stack2.isEmpty()) { while (!stack1.isEmpty()) { if (stack1.peek().right != null) { temp.add(stack1.peek().right.val); stack2.push(stack1.peek().right); } if (stack1.peek().left != null) { temp.add(stack1.peek().left.val); stack2.push(stack1.peek().left); } stack1.pop(); } } else { while (!stack2.isEmpty()) { if (stack2.peek().left != null) { temp.add(stack2.peek().left.val); stack1.push(stack2.peek().left); } if (stack2.peek().right != null) { temp.add(stack2.peek().right.val); stack1.push(stack2.peek().right); } stack2.pop(); } } if (temp.size() > 0) { result.add(temp); } } return result; } }

转载于:https://www.cnblogs.com/nickup/p/9806609.html

你可能感兴趣的文章
智慧城市建设:通联支付进驻客运站
查看>>
物联网的“合理”安全问题
查看>>
揭开数据中心光模块利润之源
查看>>
物联网想普及 先要跨过这道难关
查看>>
中国大数据公司市场价值排行榜发布
查看>>
云计算、人工智能等关键技术大揭秘
查看>>
博科:vADC管理Web流量为电商业务增速
查看>>
2017,物联网要“搞”大事情
查看>>
Pinterest将推图片搜索应用 方便用户在线购物
查看>>
《交互式程序设计 第2版》一1.4 艺术与交互
查看>>
携手共建大数据学院
查看>>
《深入理解大数据:大数据处理与编程实践》一一2.3 集群分布式Hadoop系统安装基本步骤...
查看>>
《交互式程序设计 第2版》一3.7 将外部数据载入Processing
查看>>
LoadRunner中Action的迭代次数的设置和运行场景中设置
查看>>
【转载】actor 模型的优缺点分析介绍
查看>>
敏捷开发的一些思考--故事拆分(同发csdn)
查看>>
jquery图片时钟
查看>>
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
Innodb:如何计算异步/同步刷脏及checkpoint的临界范围
查看>>
如何把命令行下的执行结果保存(二)
查看>>