LeetCode题解:Binary Tree Level Order Traversal I and II
来源:互联网 发布:淘宝网站外推广 编辑:程序博客网 时间:2024/05/22 10:48
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]]
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],]
思路:
把栈式的访问改成队列式的访问。深度优先搜索改为广度优先搜索。
题解:
/** * 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> > levelOrder(TreeNode *root) { if (!root) return vector<vector<int>>(); queue<pair<TreeNode*, int>> visit_list; vector<vector<int>> ret; visit_list.push(make_pair(root, 0)); while(!visit_list.empty()) { while(visit_list.front().second >= ret.size()) ret.push_back(vector<int>()); ret[visit_list.front().second].push_back(visit_list.front().first->val); if (visit_list.front().first->left != nullptr) visit_list.push(make_pair(visit_list.front().first->left, visit_list.front().second + 1)); if (visit_list.front().first->right != nullptr) visit_list.push(make_pair(visit_list.front().first->right, visit_list.front().second + 1)); visit_list.pop(); } return ret; }};
思路:
同上,只不过多一次std::reverse的工作。注意这里用reverse并不会带来vector的值交换,而只是交换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> > levelOrderBottom(TreeNode *root) { vector<vector<int>> retval; if (root == nullptr) return retval; queue<pair<TreeNode*, int>> traverse; traverse.push(make_pair(root, 1)); while(!traverse.empty()) { auto front = traverse.front(); traverse.pop(); if (retval.size() < front.second) retval.push_back(vector<int>()); retval.back().push_back(front.first->val); if (front.first->left != nullptr) traverse.push(make_pair(front.first->left, front.second + 1)); if (front.first->right != nullptr) traverse.push(make_pair(front.first->right, front.second + 1)); } // since std::swap is used // there is actually no vector swap, just pointers swap reverse(begin(retval), end(retval)); return retval; }};
- LeetCode题解:Binary Tree Level Order Traversal I and II
- 【Leetcode】Binary Tree Level Order Traversal I/II AND Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Level Order Traversal I and II
- LeetCode 之 Binary Tree Level Order Traversal I and II
- LeetCode题解:Binary Tree Level Order Traversal II
- LeetCode 题解(222) : Binary Tree Level Order Traversal II
- Leetcode题解 107. Binary Tree Level Order Traversal II
- LeetCode 107 Binary Tree Level Order Traversal II题解
- [Leetcode 102 and 107, Easy] Binary Tree Level Order Traversal (I and II)
- [LeetCode] Binary tree level order traversal I & II
- 【LeetCode从零单刷】Binary Tree Level Order Traversal I & II
- LeetCode Binary Tree Level Order Traversal I.II
- LeetCode | Binary Tree Level Order Traversal I,II
- 【LeetCode】binary-tree-level-order-traversal i&ii&zigzag
- LeetCode.107 Binary Tree Level Order Traversal I&II
- Binary Tree Level Order Traversal I & II
- Binary Tree Level Order Traversal II I
- Binary Tree Level Order Traversal I & II
- mysql导入.sql文件
- div里面的ul居左对齐
- eclipse 3个地方部署tomcat
- Starting MySQL… ERROR! The server quit without updating PID file
- 【discuzx2】button标签是双闭合标签
- LeetCode题解:Binary Tree Level Order Traversal I and II
- delphi 中关闭进程
- 如何高效利用GitHub
- ubuntu12.04LTS 用到了的命令【持续更新【20131104】
- 简单实用方便的ajax评论完整代码
- I2C设备驱动编写
- UI的旋转
- discuz子导航下面的版块只有图标没有标题,什么原因?
- 索引