按之字型顺序打印二叉树
来源:互联网 发布:java buffer 编辑:程序博客网 时间:2024/05/17 22:11
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
这个题目需要借用两个栈进行实现
一个栈保存奇数层从左到右(先保存左孩子再保存右孩子),另一个栈保存偶数层从右到左(先保存右孩子再保存左孩子),每当一个栈为空时进行一次打印下一个栈,一直到两个栈都为空。
重点是能够想到用两个栈。可以用画图进行分析。利用队列无法实现。这个和bfs还是有区别的。
/*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) { if(pRoot==NULL) return vector<vector<int>>{}; vector<vector<int> > res; vector<int> vec; stack<TreeNode*> *sta=new stack<TreeNode*>[2]; sta[0].push(pRoot); while(!sta[0].empty()||!sta[1].empty()) { while(!sta[0].empty()){ TreeNode* temp=sta[0].top(); vec.push_back(temp->val); sta[0].pop(); if(temp->left) sta[1].push(temp->left); if(temp->right) sta[1].push(temp->right); } if(!vec.empty()) res.push_back(vec); vec.clear(); while(!sta[1].empty()){ TreeNode* temp=sta[1].top(); vec.push_back(temp->val); sta[1].pop(); if(temp->right) sta[0].push(temp->right); if(temp->left) sta[0].push(temp->left); } if(!vec.empty()) res.push_back(vec); vec.clear(); } return res; }};
0 0
- 按之字型顺序打印二叉树
- 面试题61:按之字型顺序打印二叉树
- Z字型打印二叉树
- 剑指Offer:树的层次遍历,分层打印和按之字型打印
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 牛客网刷题之按之字形顺序打印二叉树
- 《剑指offer》按之字行顺序打印二叉树
- 之字型打印二维数组
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 牛客网 | 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 55.按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- http的缓存原理
- vue事件的延迟执行
- URAL 1989 Subpalindromes 思路
- iOS 8 WebKit框架概览(上)
- 02-线性结构1两个有序链表序列的合并
- 按之字型顺序打印二叉树
- ssh中常见的笔试面试题
- Response.Write alert失效??
- 算法面试总结
- npm install 无响应解决方案
- HDU1584(dfs回溯 或 区间dp)
- SSL 1108——【USACO 2.1】海明码(DFS)
- MYSQL(6)数据操作1
- 1025. 反转链表