题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
 
使用两个栈进行存储,我们在打印某一行节点的时候,需要将下一行的节点保存到相应的栈中,如果当前打印奇数层,那么先保存左子节点,再保存右子节点;
如果我们当前打印的偶数层,那么先保存右子节点,再保存左子节点。
注意循环退出条件。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
stack<TreeNode*> odd;//先左后右
stack<TreeNode*> even;//先右后左
vector<vector<int> > result;
if(pRoot == nullptr){
return result;
}
TreeNode* p = pRoot;
int flag = ;
odd.push(p);
while(!odd.empty() || !even.empty()){
vector<int> tmp;
if(flag % ){//当前奇数层
while(!odd.empty()){
p = odd.top();
tmp.push_back(p -> val);
odd.pop();
if(p -> left != nullptr){
even.push(p -> left);
}
if(p -> right != nullptr){
even.push(p -> right);
}
}
result.push_back(tmp);
++flag;
}
else{//当前偶数层
while(!even.empty()){
p = even.top();
tmp.push_back(p -> val);
even.pop();
if(p -> right != nullptr){
odd.push(p -> right);
}
if(p -> left != nullptr){
odd.push(p -> left);
} }
result.push_back(tmp);
++flag;
}
}
return result;
} };
 
 

剑指offer 按之字型顺序打印二叉树的更多相关文章

  1. 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)

    [剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  2. 剑指offer系列34----按之字形顺序打印二叉树

    [题目]请实现一个函数按照之字形打印二叉树, * 即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印, * 其他行以此类推. 未优化,不是最优解,博主用的是队列 ...

  3. 剑指Offer 59. 按之字形顺序打印二叉树 (二叉树)

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目地址 https://www.nowco ...

  4. [剑指Offer] 59.按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. [思路]先按层次遍历存入,通过设立标志位,将 ...

  5. 剑指offer:按之字形顺序打印二叉树(Python)

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 先给定一个二叉树的样式: 前段时间 ...

  6. 《剑指offer》从上往下打印二叉树

    本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...

  7. 剑指offer---3、按之字形顺序打印二叉树

    剑指offer---3.按之字形顺序打印二叉树 一.总结 一句话总结: |||-begin 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照 ...

  8. 【剑指Offer】从上往下打印二叉树 解题报告(Python)

    [剑指Offer]从上往下打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  9. 【剑指offer】从上向下打印二叉树

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26089165 剑指offer上的第23题,实际上就是考察二叉树的层序遍历,详细思想能够參考 ...

随机推荐

  1. sublime3常用环境配置

    如何设置侧边栏颜色 Ctrl+Shift+P -> install -> 搜索安装包SyncedSidebarBg,自动同步侧边栏底色为编辑窗口底色. 设置快捷键让html文件在浏览器窗口 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定大写文本

    <!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...

  3. java后端开发echarts

    参考: https://blog.csdn.net/mxdmojingqing/article/details/77340245 https://github.com/abel533/ECharts

  4. 列表推导式、生成器表达式以及zip()max()max()/min()sum()sort()map()filter()的用法

    列表推导式: 基本格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] #out_exp_res: 列表生成元素 ...

  5. ubunut18.04 下安装 gitlab ce版,使用清华源

    gitlab官方的ubuntu安装说明 https://about.gitlab.com/install/#ubuntu 该安装说明介绍的是gitlab-ee版本 按照该说明也能安装gitlab-ce ...

  6. npm和npx

    npx 指令会先在项目的node_modules里面找资源包 npm info 包名称  [查看资源包的信息]

  7. 中山Day10——普及

    今天又是愚蠢的一天,估分230,实得110.其中T2.4不会,这里就只说题意和简要思路. 收获:scanf>>a,以及printf<<a. T1:模板题 此题相对简单,就是读入 ...

  8. list.OfType()

    将两个类型不同是实体存入到一个object可以通过OfType方法分别取出来 //将两个类型不同是实体存入到一个object可以通过OfType方法分别取出来 List<Phone> Ph ...

  9. MacBook OSX VMWare Fusion 11安装 Tools For Windows

    需要加载对应客户机系统的安装文件,可以在/Applications/VMware\ Fusion.app/Contents/Library/isoimages文件夹下找到: 设置虚拟机的光驱: 在虚拟 ...

  10. 《React后台管理系统实战 :三》header组件:页面排版、天气请求接口及页面调用、时间格式化及使用定时器、退出函数

    一.布局及排版 1.布局src/pages/admin/header/index.jsx import React,{Component} from 'react' import './header. ...