【剑指Offer】面试题61:按之字形顺序打印二叉树
来源:互联网 发布:热云数据融资 编辑:程序博客网 时间:2024/06/05 17:24
整理自剑指Offer
一:题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
二:解题思路
以上面的例子为例:
第一层:1 从左往右打印
第二层:2,3 从右往左打印
第三层:4,5,6,7,从左往右打印
第四层:8,9,10,11,12,13,14,15 从右往左打印
我们可以看出 第二层相当于 第一层左右子树入栈后的出栈顺序
第三层相当于 第二层出栈顺序(3,2),右左子树入栈后的出栈顺序
所以整个流程可以利用栈来实现,不过奇偶层数的不同入栈的书序也不同,所以我们使用两个栈。
偶数栈:先左后右入栈
奇数栈:先右后左入栈
三:代码实现
/*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) { vector<vector<int> > result; vector<int> temp; if(pRoot==NULL) return result; stack<TreeNode* > oddStack; stack<TreeNode* > evenStack; oddStack.push(pRoot); while(!oddStack.empty() || !evenStack.empty()){ int topNum; TreeNode* pNode; //打印奇数行,从左向右(从1开始) while(!oddStack.empty()){ pNode=oddStack.top(); topNum=pNode->val; oddStack.pop(); temp.push_back(topNum); //下一层从右往左打印,左子树先入栈,右子树再入栈(栈后进先出) if(pNode->left!=NULL) evenStack.push(pNode->left); if(pNode->right!=NULL) evenStack.push(pNode->right); } //注意了!!! if(temp.size()!=0) result.push_back(temp); temp.clear(); //打印偶数行,从右向左 while(!evenStack.empty()){ pNode=evenStack.top(); topNum=pNode->val; evenStack.pop(); temp.push_back(topNum); //下一层从左往右打印。右子树先入栈,左子树再入栈 if(pNode->right!=NULL) oddStack.push(pNode->right); if(pNode->left!=NULL) oddStack.push(pNode->left); } //注意了!!! if(temp.size()!=0) result.push_back(temp); temp.clear(); } return result; } };
阅读全文
0 0
- 《剑指Offer》学习笔记--面试题61:按之字形顺序打印二叉树
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 剑指offer--面试题61:按之字形顺序打印二叉树
- 剑指offer-面试题61-按之字形顺序打印二叉树
- 剑指offer 面试题61 按之字形顺序打印二叉树
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 《剑指offer》Python语言 面试题61:按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 《剑指offer》:[61]按之字形顺序打印二叉树
- java面试题(剑指offer):之字形打印二叉树
- 面试题68:按之字形顺序打印二叉树
- 面试题61. 按之字形顺序打印二叉树
- linux常用的命令
- Tensorflow for linux 安装过程
- hive 数据写入es
- java手机端后台信息交互
- InnoDB主要特性、概念和架构
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- Go mobile(〇)
- leetcode 354. Russian Doll Envelopes & leetcode 300 Longest Increasing Subsequence
- java执行jar出现编码问题的解决方案,Could not decode a text frame as UTF-8
- mysql索引
- Android数据库(SQLite)框架(7)——使用LitePal聚合函数
- 计算两段文本的相识度
- 25 web.xml配置详解及示例
- 用openssl进行rsa的加密与解密(linux,C++版)