LeetCode--Binary Tree Zigzag Level Order Traversal
2017-11-22 11:39
441 查看
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,null,null,15,7],
return its zigzag level order traversal as:
思路:类似于上一题。就是设置更新标志位,每一层反向遍历,递归的时候一直头插,迭代的时每层反向。
方法一:递归。
方法二:非递归。
方法三:堆栈。
For example:
Given binary tree [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
思路:类似于上一题。就是设置更新标志位,每一层反向遍历,递归的时候一直头插,迭代的时每层反向。
方法一:递归。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>result; traverse(root,1,result,true); return result; } void traverse(TreeNode* root,int level,vector<vector<int>>&result,bool left_to_right){ if(!root) return; if(level>result.size()){ result.push_back(vector<int>()); } if(left_to_right){ result[level-1].push_back(root->val); } else{ result[level-1].insert(result[level-1].begin(),root->val); } traverse(root->left,level+1,result,!left_to_right); traverse(root->right,level+1,result,!left_to_right); } };
方法二:非递归。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>result; queue<TreeNode*>current,next; bool left_to_right=true; if(!root) return result; else current.push(root); while(!current.empty()){ vector<int>level; while(!current.empty()){ TreeNode *node=current.front(); current.pop(); level.push_back(node->val); if(node->left) next.push(node->left); if(node->right) next.push(node->right); } if(!left_to_right) reverse(level.begin(),level.end()); result.push_back(level); left_to_right=!left_to_right; swap(current,next); } return result; } };
方法三:堆栈。
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > result; stack<TreeNode *> stack1,stack2; if(pRoot) stack1.push(pRoot); TreeNode *node; while(!stack1.empty() || !stack2.empty()){ vector<int> data; if(!stack1.empty()){ while(!stack1.empty()){ node = stack1.top(); stack1.pop(); data.push_back(node->val); if(node->left!=NULL) stack2.push(node->left); if(node->right!=NULL) stack2.push(node->right); } result.push_back(data); } else if(!stack2.empty()){ while(!stack2.empty()){ node = stack2.top(); stack2.pop(); data.push_back(node->val); if(node->right!=NULL) stack1.push(node->right); if(node->left!=NULL) stack1.push(node->left); } result.push_back(data); } } return result; } };
相关文章推荐
- leetcode第46题(binary-tree-zigzag-level-order-traversal)
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode 103:Binary Tree Zigzag Level Order Traversal
- LeetCode No.103 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[103]-Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal
- LeetCode 103 Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal -- LeetCode
- LeetCode_binary-tree-zigzag-level-order-traversal
- Leetcode-103(Java) 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 106: Binary Tree Zigzag Level Order Traversal