LeetCode之“树”:Binary Tree Level Order Traversal && Binary Tree Level Order Traversal II
2015-07-08 21:53
423 查看
Binary Tree Level Order Traversal
题目链接题目要求:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
这道题利用宽度优先搜索就可以了,具体程序(8ms)如下:
/** * 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>> levelOrder(TreeNode* root) { vector<vector<int>> retVec; if(!root) return retVec; retVec.push_back(vector<int>{root->val}); queue<TreeNode *> que; que.push(root); while(true) { vector<int> vec; queue<TreeNode *> q; while(!que.empty()) { TreeNode *tree = que.front(); que.pop(); if(tree->left) { vec.push_back((tree->left)->val); q.push(tree->left); } if(tree->right) { vec.push_back((tree->right)->val); q.push(tree->right); } } if(!q.empty()) { que = q; retVec.push_back(vec); } else break; } return retVec; } };
Binary Tree Level Order Traversal II
题目链接题目要求:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
这道题基本更上边的题目一样,我们只需要将上题的结果retVec最后再反转一下就可以了,即添加如下一行即可:
reverse(retVec.begin(), retVec.end());
这样的程序只要8ms,但下边基本一样的程序却要64ms:
/** * 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>> levelOrderBottom(TreeNode* root) { vector<vector<int>> retVec; if(!root) return retVec; retVec.insert(retVec.begin(), vector<int>{root->val}); queue<TreeNode *> que; que.push(root); while(true) { vector<int> vec; queue<TreeNode *> q; while(!que.empty()) { TreeNode *tree = que.front(); que.pop(); if(tree->left) { vec.push_back((tree->left)->val); q.push(tree->left); } if(tree->right) { vec.push_back((tree->right)->val); q.push(tree->right); } } if(!q.empty()) { que = q; retVec.insert(retVec.begin(), vec); } else break; } return retVec; } };
View Code
相关文章推荐
- 算法复习之选择排序
- OSGEarth嵌入Qt的QGraphicsView框架(二)
- Java抽象类与接口的区别
- 教务考试系统的总结
- SharePoint 2013 配置基于表单的身份认证
- UIScrollViewDelegate协议方法概述
- 按照防火墙的实现方式,可以把防火墙分为哪几类?
- Java连接MySQL数据库
- 提取IP 地址(算法)
- leetcode-- 动态规划 dynamic programming
- atoi
- Longest Consecutive Sequence
- 《Java从入门到精通》第十二章学习笔记
- NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class
- python装饰器
- SharePoint 2013 配置基于表单的身份认证
- [NHibernate] Guid 作主键速度超慢的背后
- puppet
- 5种PHP创建数组的方式,你都了解哪些?
- 第十章:单词出现次数程序