利用bds和dfs解决 LeetCode 107. Binary Tree Level Order Traversal II
来源:互联网 发布:北京市政务数据资源网 编辑:程序博客网 时间:2024/05/23 20:40
问题简述
给定一棵二叉树,返回该二叉树自底向上遍历的结点值(即从左到右,自底向上)
比如给定一颗二叉树 [3,9,20,null,null,15,7]
3 / \ 9 20 / \ 15 7
返回的结果为
[ [15,7], [9,20], [3]]
解决方案
解法1:广度优先遍历(BFS)
最简单的想法就是先广度优先遍历,按层存值,最后倒一下~
直接上代码
/** * 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 {private: vector<vector<int>> res;private: void _bfs(TreeNode* root){ queue<TreeNode*> q; q.push(root); while (!q.empty()){ int len = q.size(); vector<int> vec; for (int i = 0; i < len; i++){ TreeNode* tmp = q.front(); q.pop(); if (tmp->left) q.push(tmp->left); if (tmp->right) q.push(tmp->right); vec.push_back(tmp->val); } res.push_back(vec); } }public: vector<vector<int>> levelOrderBottom(TreeNode* root) { res.clear(); if (!root) return res; _bfs(root); reverse(res.begin(), res.end()); return res; }};
解法2:深度优先遍历(DFS)
另一种做法是,一边深度遍历,一边按照层数记录数据
/** * 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 {private: vector<vector<int>> res;private: void _dfs(TreeNode* root, int layer){ if (!root) return; if (layer >= res.size()){ res.insert(res.begin(), vector<int>()); } res[res.size() - layer - 1].push_back(root->val); _dfs(root->left, layer + 1); _dfs(root->right, layer + 1); }public: vector<vector<int>> levelOrderBottom(TreeNode* root) { res.clear(); if (!root) return res; _dfs(root, 0); return res; }};
阅读全文
0 0
- 利用bds和dfs解决 LeetCode 107. Binary Tree Level Order Traversal II
- [LeetCode]102. Binary Tree Level Order Traversal&107. Binary Tree Level Order Traversal II
- LeetCode: Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [Leetcode] Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- 【leetcode】Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- [Leetcode]Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- LeetCode-Binary Tree Level Order Traversal II
- LeetCode - Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- LeetCode | Binary Tree Level Order Traversal II
- LeetCode - Binary Tree Level Order Traversal II
- 【leetcode】Binary Tree Level Order Traversal II
- 将普通用户提升为域管理员
- 笔记:余凯 基于深度学习的自动驾驶之路
- 流年不利
- 通过按钮显示隐藏listview中的数据
- 字符串的比较&&拷贝&&合并
- 利用bds和dfs解决 LeetCode 107. Binary Tree Level Order Traversal II
- mac下如何安装mysql以及忘记密码如何重置密码
- MAC 下面 PYTHON的安装与使用
- P1196 银河英雄传说 洛谷
- 基于Python操作ElasticSearch
- LA 3942 Remember the Word
- SDUT 2120-数据结构实验之链表五:单链表的拆分
- 运维自动化架构
- 折弯它的流,再挂个钩