103. Binary Tree Zigzag Level Order Traversal
2016-02-23 10:58
429 查看
Binary Tree Zigzag Level Order Traversal
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] ]
解析
如果输出下边这样的结果,是不是想到这道题Binary Tree Level Order Traversal[ [3], [9,20], [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>> vvi; if(root==NULL) return vvi; queue<TreeNode*> que; TreeNode* p=root; que.push(p); int curcount=1;//当前层结点数 int nextcount=0;//下一层结点数 int depth=0;//树的深度,从0开始计算 vector<int> vi; while(!que.empty()){ p=que.front(); que.pop(); vi.push_back(p->val); --curcount; if(p->left){ ++nextcount; que.push(p->left); } if(p->right){ ++nextcount; que.push(p->right); } if(curcount==0){//当前层最后一个结点,下次循环进入下一层 if(depth&1){ reverse(vi.begin(),vi.end()); } vvi.push_back(vi); vi.clear(); curcount=nextcount; nextcount=0; ++depth; } } return vvi; } };
ps: 这段代码用了很多次了,屡试不爽。需要掌握~~~~
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- AVL树-自平衡二叉查找树(Java实现)
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua中调用C++函数示例
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题