Binary Tree Zigzag Level Order Traversal
2016-08-24 09:10
344 查看
Description:
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,
return its zigzag level order traversal as:
分析:广度优先遍历,用一个bool记录从左到右,或从右到左(翻转一下即可)。
测试:
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,
return its zigzag level order traversal as:
分析:广度优先遍历,用一个bool记录从左到右,或从右到左(翻转一下即可)。
#include <iostream> #include <queue> #include <vector> #define Elementype int using namespace std; typedef struct TreeNode //树结点 { Elementype val; TreeNode *left; TreeNode *right; TreeNode(Elementype x) : val(x), left(nullptr), right(nullptr) {} } *Tree; int index = 0; //全局索引变量 //使用先序遍历创建创建二叉树 void MakeBinaryTree(Tree &T, Elementype value[]) { Elementype c = value[index++]; if (c == '#') T = nullptr; else { T = new TreeNode(c); MakeBinaryTree(T->left, value); MakeBinaryTree(T->right, value); } } //使用两个队列,一个队列用来存放当前level指针,另一个队列用来存储下一个将要访问的level vector<vector<Elementype> > BinaryTreepostorderTraversal(Tree root) { queue<Tree> curQue, nextQue; vector<vector<Elementype> > result; vector<Elementype> level; bool flag = false; //记录从左到右,还是从右到左 Tree p = root; curQue.push(p); while (!curQue.empty()) { p = curQue.front(); level.push_back(p->val); curQue.pop(); if (p->left != nullptr) nextQue.push(p->left); if (p->right != nullptr) nextQue.push(p->right); if (curQue.empty()) { if (flag) { reverse(level.begin(),level.end()); result.push_back(level); flag = false; } else { result.push_back(level); flag = true; } level.clear(); swap(nextQue, curQue); } } return result; } int main() { Tree T = nullptr; //注意,每个结点都要有值,注意这里的取值不要等于35,即# vector<vector<Elementype>> result; Elementype data[11] = { 3, 9, '#', '#', 20, 15, '#', '#', 7, '#', '#' }; MakeBinaryTree(T, data); result = BinaryTreepostorderTraversal(T); cout << "[" << endl; for (auto &s : result) { cout << " ["; for (auto &t : s) cout << t << " "; cout << "]," << endl; } cout << "]" << endl; system("pause"); return 0; }
测试:
相关文章推荐
- Binary Tree Zigzag Level Order Traversal
- LeetCode103 Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- leetcode Binary Tree Zigzag Level Order Traversal C++
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- LeetCode OJ:Binary Tree Zigzag Level Order Traversal
- LeetCode No.103 Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- LeetCode刷题(C++)——Binary Tree Zigzag Level Order Traversal(Medium)
- leetcode - Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- [leetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal-二叉树锯齿层次遍历-二叉树DFS层次遍历
- binary-tree-zigzag-level-order-traversal Java code
- Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- binary-tree-zigzag-level-order-traversal
- 103. Binary Tree Zigzag Level Order Traversal