[LeetCode] Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:马踏棋盘算法 编辑:程序博客网 时间:2024/05/22 01:36
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]问题描述:给定一个二叉树,返回它的层次遍历,要求相邻的两层的访问次序不一样,一层是从左到右,另外一层是从右到左。之前做的关于层次遍历的采用的是队列,这样,每层都是同一个方向访问。在这里要求是相邻的两层的访问次序不一样。是否可以采用栈呢?比如这个例子,先访问根节点,然后入栈,然后访问根节点的左孩子和右孩子,接着也入栈,再逐个出栈并访问右孩子,再访问左孩子,也依次入栈。代码中使用了两个栈,一个栈的内容对应了一层,交替访问两个栈。class Solution {public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if(root == NULL) return vector<vector<int> >(0, vector<int>()); stack<TreeNode *> sta1, sta2; vector<vector<int> > vec; vector<int> ivec; TreeNode *pnode = NULL; sta1.push(root); ivec.push_back(root->val); vec.push_back(ivec); ivec.clear(); while(!sta1.empty()) { while(!sta1.empty()) { pnode = sta1.top(); sta1.pop(); if(pnode->right) { sta2.push(pnode->right); ivec.push_back(pnode->right->val); } if(pnode->left) { sta2.push(pnode->left); ivec.push_back(pnode->left->val); } } if(!ivec.empty()) { vec.push_back(ivec); ivec.clear(); } while(!sta2.empty()) { pnode = sta2.top(); sta2.pop(); if(pnode->left) { sta1.push(pnode->left); ivec.push_back(pnode->left->val); } if(pnode->right) { sta1.push(pnode->right); ivec.push_back(pnode->right->val); } } if(!ivec.empty()) { vec.push_back(ivec); ivec.clear(); } } return vec; }};
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal
- [leetcode] Binary Tree Zigzag Level Order Traversal
- LeetCode - Binary Tree Zigzag Level Order Traversal
- LeetCode:Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- 矢量图控件VectorDraw使用教程:添加vdFramedControl (Visual C# 2005)
- 图解linux下top命令的使用
- 从头开始学一个android activity
- C语言指针问题 又是一段“扯”
- Absorbing markov chain
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- 【Android】SQLite使用
- myeclipse开发编译时:找不到class文件
- myeclipse8.5安装反编译插件JadClipse 3.3
- Android ActivityGroup Back键的处理
- 为何要通过公有接口来访问私有成员(2)
- Fibonacci
- 【Flash开发】mouseOver与rollOver的区别
- APUE读书笔记(2.0) ——第二章 Unix 标准化及实现