剑指offer-面试题32-之字形打印二叉树-二叉树栈
时间:2019-11-27
本文章向大家介绍剑指offer-面试题32-之字形打印二叉树-二叉树栈,主要包括剑指offer-面试题32-之字形打印二叉树-二叉树栈使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/* 题目: 分行按层自上向下呈之字形打印二叉树。第一行从左到右,第二行从右到左,第三行从左到右... */ /* 思路: 使用两个栈stack1和stack2。 stack1存储从左向右打印的节点,stack2存储从右向左打印的节点。 stack1中pop的节点,按照先插入左节点再插入右节点的顺序到stack2中。 stack2与之相反。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; void Print(TreeNode* root){ if(root == nullptr) return; stack<TreeNode*> stack1; stack<TreeNode*> stack2; stack1.push(root); while(!stack1.empty() || !stack2.empty()){ while(!stack1.empty()){ TreeNode* temp = stack1.top(); cout<<temp->val<<" "; stack1.pop(); if(temp->left != nullptr){ stack2.push(temp->left); } if(temp->right != nullptr){ stack2.push(temp->right); } } cout<<endl; while(!stack2.empty()){ TreeNode* temp = stack2.top(); cout<<temp->val<<" "; stack2.pop(); if(temp->right!= nullptr){ stack1.push(temp->right); } if(temp->left != nullptr){ stack1.push(temp->left); } } cout<<endl; } } int main(){ TreeNode* node1 = new TreeNode(1); TreeNode* node2 = new TreeNode(2); TreeNode* node3 = new TreeNode(3); TreeNode* node4 = new TreeNode(4); TreeNode* node5 = new TreeNode(5); TreeNode* node6 = new TreeNode(6); node1->left = node2; node1->right = node3; node2->left = node4; node3->left = node5; node3->right = node6; Print(node1); }
原文地址:https://www.cnblogs.com/buaaZhhx/p/11944958.html
- Spring-AOP
- DBA和开发同事的一些代沟(三)(r7笔记第29天)
- 简单易学的机器学习算法——非线性支持向量机
- 一条关于swap争用的报警邮件分析(一)(r7笔记第28天)
- Spring-IOC(2)
- Python3 pandas read_csv 读取txt文件报错:IOError: Initializing from file failed
- dataguard添加临时数据文件的bug(r7笔记第27天)
- 简单易学的机器学习算法——线性支持向量机
- Java设计模式-模板方式模式
- 由一条create语句的问题对比mysql和oracle中的date差别 (r7笔记第26天)
- Java设计模式-命令模式
- 关于执行计划中的%CPU的含义 (r7笔记第25天)
- Java设计模式-享元模式
- 简单易学的机器学习算法——线性可分支持向量机
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Rust日报】2020-07-28 SO:在命令行下浏览StackOverflow
- 【翻译】200行代码讲透RUST FUTURES (6)
- MPU6050姿态解算方式1-DMP
- 打卡群刷题总结0729——分隔链表
- 单细胞tSNE细胞降维图还可以这样做?!
- 从IIC实测波形入手,搞懂IIC通信
- FreeRTOS例程4-串口DMA收发不定长数据
- FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- 前端如何将json数据导出为excel文件
- 使用Postman访问腾讯云API3.0
- C语言将float拆分为4个hex传输与重组
- C语言字符串相关函数使用示例 strtok_r strstr strtok atoi
- FreeRTOS例程1-基础任务创建
- ARouter路由记录
- java的DES和3DES加解密算法