剑指Offer-59.按之字形顺序打印二叉树(C++/Java)
题目:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析:
实际上是二叉树的层次遍历,只不过每一行输出的方向都是相反的,每遍历二叉树的结点时,都将其内的每一个结点的左右孩子都保存好,设置一个标志,ture时就正序输出,false就逆序输出val,直到所有的结点都打印完即可。
程序:
C++
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot == nullptr)
return res;
vector<TreeNode*> printS;
vector<TreeNode*> temp;
printS.push_back(pRoot);
bool flag = true;
while(!printS.empty()){
//vector<TreeNode*> temp;
vector<int> resTemp;
for(auto i:printS){
if(i->left != nullptr)
temp.push_back(i->left);
if(i->right != nullptr)
temp.push_back(i->right);
}
if(flag){
for(int i = 0; i < printS.size(); ++i)
resTemp.push_back(printS[i]->val);
}
else{
for(int i = printS.size()-1; i >= 0; --i)
resTemp.push_back(printS[i]->val);
}
flag = !flag;
res.push_back(resTemp);
printS.swap(temp);
temp.clear();
}
return res;
}
private:
vector<vector<int>> res;
};
Java
import java.util.ArrayList; /*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null; public TreeNode(int val) {
this.val = val; } }
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
if(pRoot == null)
return res;
ArrayList<TreeNode> printS = new ArrayList<>();
ArrayList<TreeNode> temp = new ArrayList<>();
boolean flag = true;
printS.add(pRoot);
while(!printS.isEmpty()){
ArrayList<Integer> resTemp = new ArrayList<>();
for(TreeNode i:printS){
if(i.left != null)
temp.add(i.left);
if(i.right != null)
temp.add(i.right);
}
if(flag){
for(int i = 0; i < printS.size(); ++i)
resTemp.add(printS.get(i).val);
}
else{
for(int i = printS.size()-1; i >= 0; --i)
resTemp.add(printS.get(i).val);
}
flag = !flag;
res.add(resTemp);
printS.clear();
printS.addAll(temp);
temp.clear();
resTemp = null;
}
return res;
}
private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
}
剑指Offer-59.按之字形顺序打印二叉树(C++/Java)的更多相关文章
- 剑指Offer 59. 按之字形顺序打印二叉树 (二叉树)
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目地址 https://www.nowco ...
- [剑指Offer] 59.按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. [思路]先按层次遍历存入,通过设立标志位,将 ...
- 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)
[剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 剑指offer系列34----按之字形顺序打印二叉树
[题目]请实现一个函数按照之字形打印二叉树, * 即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印, * 其他行以此类推. 未优化,不是最优解,博主用的是队列 ...
- 剑指offer:按之字形顺序打印二叉树(Python)
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 先给定一个二叉树的样式: 前段时间 ...
- 剑指offer---3、按之字形顺序打印二叉树
剑指offer---3.按之字形顺序打印二叉树 一.总结 一句话总结: |||-begin 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照 ...
- 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]
1 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 2 思路和方法 先给定一个二叉树的样式: ...
- 剑指offer 按之字型顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 使用两个栈进行存储,我们在打印某一行节点 ...
- 《剑指offer》从上往下打印二叉树
本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...
- 【剑指Offer】从上往下打印二叉树 解题报告(Python)
[剑指Offer]从上往下打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
随机推荐
- Linux下的常见基本指令
pwd //显示当前用户所在的路径 ls //显示当前路径下的文件名或者目录名称 ls-l //显示当前路径下的文件或者目录的更详细的属性信息 cd 一个目录路径 //进入一个目录,进去后,可以用pw ...
- .Net与AI的强强联合:AntSK知识库项目中Rerank模型的技术突破与实战应用
随着人工智能技术的飞速发展,.Net技术与AI的结合已经成为了一个新的技术热点.今天,我要和大家分享一个令人兴奋的开源项目--AntSK,这是一个基于.net平台构建的开源离线AI知识库项目.在这个项 ...
- StarLake:汇量科技云原生数据湖的探索和实践
简介: 快速了解汇量科技在云原生数据湖领域的探索和实践,详解 StarLake 的架构及业务应用案例. 作者:陈绪(汇量科技资深算法架构师,EnginePlus 2.0 产品负责人) 内容框架: 互联 ...
- Apache Dubbo 3.0.0 正式发布 - 全面拥抱云原生
简介: 一个新的里程碑! 一.背景 自从 Apache Dubbo 在 2011 年开源以来,在一众大规模互联网.IT公司的实践中积累了大量经验后,Dubbo 凭借对 Java 用户友好.功能丰富.治 ...
- [FAQ] Solidity 并发执行 ? 重入攻击 ?
Solidity 实现的合约中,函数操作都是原子操作,旷工本地执行,取得共识后发布到区块链上. 实际发布到区块链上的不存在并发,全节点同步状态到本地. Solidity 中有三种方式进行转账,addr ...
- SpringBoot获取配置:@Value、@ConfigurationProperties方式
配置文件yml # phantomjs的位置地址 phantomjs: binPath: windows: binPath-win linux: binPath-linux jsPath: windo ...
- ES Monitoring 整理笔记
Monitoring是elastic stack的监控模块,监控信息存在es索引中,并且可以通过kibana进行可视化的展示.(收集监控数据的方式从6.5版本起由Collectors-Exporter ...
- 【爬虫+情感判定+Top10高频词+词云图】"乌克兰"油管热评python舆情分析
目录 一.分析背景 二.整体思路 三.代码讲解 3.1 爬虫采集 3.2 情感判定 3.3 Top10高频词 3.4 词云图 四.得出结论 五.同步视频演示 六.附完整源码 一.分析背景 乌克兰局势这 ...
- 08 ES基本的聚合查询
目录 按protocol聚合 指定地区,按port聚合 指定地区和时间段,按ip聚合(独立ip 即ip去重) 并且 聚合再求独立ip数 聚合后将聚合结果进行分页的解决办法 子聚合 按protocol聚 ...
- Rails向数据库添加新字段和修改字段
目录 添加字段 控制台上执行下面的命令 会生成文件db/migrate/20210529131328_add_column_to_black_ips.rb 执行迁移 执行结果 修改字段 添加迁移文件 ...