技术标签: code
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
在层序遍历的基础上,添加一个栈,并设置一个flag,当flag为true的时候从左至右打印,该层打印完成之后置flag为false;
紧接着一层为从右只左打印,将该层的n个节点从队列中弹出,压入栈中,再依次从栈中弹出元素并打印,该层打印完成之后置flag为true。循环……
vector<vector<int> > Print(TreeNode *pRoot) {
vector<vector<int>> ve;
if (pRoot == NULL) return ve;
queue<TreeNode *> q;
q.push(pRoot);
int i = 1;
bool flag = true;
while (!q.empty()) {
vector<int> v;
int count = 0;
if (flag) {
for (int j = 0; j < i; ++j) {
TreeNode *tmp = q.front();
q.pop();
v.push_back(tmp->val);
if (tmp->left) {
q.push(tmp->left);
count++;
}
if (tmp->right) {
q.push(tmp->right);
count++;
}
}
flag = false;
}
else{
stack<TreeNode*> sta;
for (int j = 0; j < i; ++j) {
TreeNode *tmp = q.front();
q.pop();
sta.push(tmp);
if (tmp->left) {
q.push(tmp->left);
count++;
}
if (tmp->right) {
q.push(tmp->right);
count++;
}
}
while (!sta.empty()){
TreeNode *tmp = sta.top();
sta.pop();
v.push_back(tmp->val);
}
flag = true;
}
i = count;
ve.push_back(v);
}
return ve;
}
以下内容仅为android程序员自己测试时搭建的简单测试服务器。 根据一般apk升级步骤: 1. 请求服务器versionCode和本地apk的versionCode比对,如果服务器versionCode大于apk的versionCode,则执行2),否则结束; 2. 弹出对话框,告知用户有新的版本可以更新,用户点击更新,则执行3)开始下载apk,否则结束; 3. 后台下载最新版本的apk。
package io;import java.io.BufferedOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/**缓冲区写出字节时的缓冲区问题@author W*/public class Buff...
转自:http://www.yishimei.cn/network/782.htmlkaili linux iso:https://www.kali.org/downloads/上次给大家介绍了关于黑客专用系统Kali Linux后,有许多小伙伴都表现出了极大的兴趣,但是想要彻底深入的学习Kali Linux,不仅要知道它的用途与大概介绍,更要亲身实践才能学到真正的黑客技能,考虑到...
JVM(三)–垃圾收集算法这篇博客的内容包括:一、垃圾收集算法:1,标记——清除算法:2,复制算法:3,标记——整理算法:4,分代收集算法:二、涉及到的问题:1,标记清除,标记整理,复制算法分别是什么,各有什么缺点2,新生代和老年代各用什么算法?3,为什么要划分新生代和老年代?4,新生代分为什么?年轻代为什么分为Eden和Survior区?5,新生代和老年代的年龄阈值是多少?初识GC自动垃圾回收机制,简单来说就是寻找 Java堆中的无用对象。打个比方:你的房间是
1、获取手机屏幕当前显示的activity名与所属的包名:adb shell dumpsys window windows | findstr Current【延伸阅读】有人会有疑问:adb shell dumsys后面可以接哪些参数呢?其实很简单,我们在cmd中输入以下命令:adb shell service list,就会显示可以显示的参数:Found 178 services:0 ...
互联网产品设计进阶(10)关注赢利模式整天都在思考项目的进展,忙碌了一天,终于有点时间来打理思绪。晚上收到一封快件,收到一位编辑朋友送来的几本书,里面有一本最近比较热门的《设计原本》。读一本书时,我喜欢看书的前言,因为这里反映了作者的原始动机。正如书中所写,“思维的过程、人与人的
一般我们都是分离Java和配置文件,但是如果配置路径有问题,会导致找不到配置文件。在mybatis-config文件中,设置配置文件路径,注意:不要用.而是用/不要用.而是用/不要用.而是用/ <mappers> <mapper resource="org/example/dao/EmployeeMapper.xml"/> </mappers>不然会扫描不到...
Intellij IDEA自动创建单元测试,这在我之前的博客已有介绍 IntelliJ IDEA中用快捷键自动创建测试类下面是我在创建springboot测试类中的说明和遇到的问题创建好了测试类后1.测试service层测试类需要加上注解:@Runwith,@SpringBootTest2.测试Controller层测试类需要加上注解:@Runwith,@SpringB
基本语句:select variable1, variable2, variable3.....from tablewhere condition1 and/or condition2....group by variable1, variable2, variable3......having condition1, condition2.....order by va
2023年最新大数据面试宝典,目前已更新到第4版,广受好评!
一:项目介绍介绍:模拟实现一个基于文本界面的——客户信息管理系 类和对象(属性、方法及构造器) 类的封装 引用数组 数组的插入、删除和替换 多对象协同工作 该简易系统能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表项目采用分级菜单方式。1、主菜单如下:—————–客户信息管理软件—————– 1 ...
vue中特殊的键盘修饰符,不必去记特定的keyCode:@keyup.13 == @[email protected] == @[email protected] == @keyup.delete (捕获 “删除” 和 “退格” 键)@keyup.27 == @[email protected] == @[email protected] == @k[email protected] == @[email protected] == @[email protected]