LeetCode—Binary Tree Zigzag Level Order Traversal 二叉树的Z扫描
2015-04-08 14:01
218 查看
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
return its zigzag level order traversal as:
题目还是比较简单,主要就是一个层次扫描然后进行翻转的过程
这里有点类似层序扫描,在层序扫描中主要是利用了一个queue进行存储节点,然后读出对应的val,这里需要返回的类型需要具体按层给出,所以就需要用到一个vector将每一层的节点进行记录
主要是利用了一个vector的翻转操作
还看到一个用queue进行操作的方法,这里是在每一层操作的最后面放上一个NULL节点,用于判断这一层的数据解完了
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] ]
题目还是比较简单,主要就是一个层次扫描然后进行翻转的过程
这里有点类似层序扫描,在层序扫描中主要是利用了一个queue进行存储节点,然后读出对应的val,这里需要返回的类型需要具体按层给出,所以就需要用到一个vector将每一层的节点进行记录
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> res; int flag= 0; vector<vector<int> > zigzagLevelOrder(TreeNode *root) { res.clear(); if(root == NULL) { return res; } vector<TreeNode*>pNode; pNode.push_back(root); vector<int> tmp; tmp.push_back(root->val); res.push_back(tmp); flag++; getNode(pNode); return res; } void getNode(vector<TreeNode*> &pNode) { if(pNode.empty()) { return; } vector<TreeNode*> Node; vector<TreeNode*>::iterator it = pNode.begin(); vector<int> tmp; for(;it != pNode.end();it++) { TreeNode * root = *it; if(root->left) { tmp.push_back(root->left->val); Node.push_back(root->left); } if(root->right) { tmp.push_back(root->right->val); Node.push_back(root->right); } } if(tmp.empty()) { return; //<没有孩子节点,可以返回 } if(flag&1) { reverse(tmp.begin(),tmp.end()); } flag++; res.push_back(tmp); getNode(Node); } };
主要是利用了一个vector的翻转操作
还看到一个用queue进行操作的方法,这里是在每一层操作的最后面放上一个NULL节点,用于判断这一层的数据解完了
/** * Definition for binary tree * 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; vector<int> temp; result.clear(); if(root==NULL) return result; queue<TreeNode *> pTemp; int flag=0; pTemp.push(root); pTemp.push(NULL); while(!pTemp.empty()) { TreeNode *curNode=pTemp.front(); pTemp.pop(); if(curNode!=NULL) { temp.push_back(curNode->val); if(curNode->left) pTemp.push(curNode->left); if(curNode->right) pTemp.push(curNode->right); } else { if(!temp.empty()) { pTemp.push(NULL); if(flag==1) { reverse(temp.begin(),temp.end()); } result.push_back(temp); flag=1-flag; temp.clear(); } } } return result; } };
相关文章推荐
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- LeetCode-Binary Tree Zigzag Level Order Traversal-二叉树锯齿层次遍历-二叉树DFS层次遍历
- Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
- 【LeetCode】Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历 - Medium(LinkedIn)
- Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树层次遍历 栈]
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树 栈]
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- LeetCode | Binary Tree Zigzag Level Order Traversal(二叉树锯齿形层序输出)
- Binary Tree Zigzag Level Order Traversal 二叉树按层遍历,zigzag输出@LeetCode
- LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium
- LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
- leetcode_102题——Binary Tree Level Order Traversal(二叉树,广度优先搜索,队列)
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- leetcode第46题(binary-tree-zigzag-level-order-traversal)
- Binary Tree Zigzag Level Order Traversal——LeetCode
- 【LeetCode】Binary Tree Zigzag Level Order Traversal
- leetcode 103: Binary Tree Zigzag Level Order Traversal