每天一道LeetCode-----二叉树逐层遍历,每一层存在一个序列中,返回所有序列集合
2017-12-27 12:59
477 查看
Binary Tree Level Order Traversal
原题链接Binary Tree Level Order Traversal二叉树的逐层遍历,不过是要求每一层占用一个vector
递归即可,时刻记录当前处在第几层
/** * 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>> res; levelOrder(root, res, 0); return res; } private: void levelOrder(TreeNode* root, vector<vector<int>>& res, int h) { if(!root) return; if(h == res.size()) res.emplace_back(vector<int>()); levelOrder(root->left, res, h + 1); levelOrder(root->right, res, h + 1); res[h].emplace_back(root->val); } };
原题链接Binary Tree Level Order Traversal II
逐层遍历,要求顺序和上面相反
额,求完直接逆序即可
/** * 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>> res; levelOrder(root, res, 0); std::reverse(res.begin(), res.end()); return res; } private: void levelOrder(TreeNode* root, vector<vector<int>>& res, int h) { if(!root) return; if(h == res.size()) res.emplace_back(vector<int>()); levelOrder(root->left, res, h + 1); levelOrder(root->right, res, h + 1); res[h].emplace_back(root->val); } };
相关文章推荐
- 每天一道LeetCode-----计算给定序列中所有长度为k的滑动窗的最大值集合
- 每天一道LeetCode-----找到给定序列中所有和为某个值的集合或集合个数,序列中可以有/无重复项,集合元素顺序不同算不同集合等
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- 每天一道LeetCode-----实现一个栈,提供一个接口用于返回栈中最小值
- 每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0
- 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
- 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少
- 每天一道LeetCode-----对表达式添加括号并求值,返回所有可能的计算结果
- 每天一道LeetCode-----找到二叉树所有和为给定值的路径
- leetcode 491. Increasing Subsequences所有的递增序列 + 一个典型的深度优先遍历DFS的做法
- 每天一道LeetCode-----找出给定序列的所有子序列
- 每天一道LeetCode-----从右向左观察一棵二叉树,返回能看到的元素
- 每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和
- 每天一道LeetCode-----根据中序遍历和后序遍历重构二叉树
- 每天一道LeetCode-----一个整数序列,每个元素出现两次,只有一个(两个)出现一次,找到这个(这两个)元素
- 每天一道LeetCode-----以字符串的形式输出二叉树所有从根节点到叶子节点的路径
- 每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
- 每天一道LeetCode-----为二叉树增加next节点,指向同一层的下一个节点
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 根据二叉树的中序遍历和后序遍历创建 一棵二叉树,并且返回所创建的树的树高,具体方法请参见下面源码(经过调试,无任何bug存在)