LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
来源:互联网 发布:java源码分析工具 编辑:程序博客网 时间:2024/04/30 05:43
翻译
给定一个二叉树,返回从下往上遍历经过的每个节点的值。从左往右,从叶子到节点。例如:给定的二叉树是 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7返回它从下往上的遍历结果:[ [15,7], [9,20], [3]]
原文
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 7return its bottom-up level order traversal as:[ [15,7], [9,20], [3]]
分析
其实吧,不管是从上到下还是从下到上都无所谓啦,最后反转一下就好了,关键还是在于如何去遍历。
我一开始没理解好题意,结果是按节点下面的两个叶子来添加到vector的,后来发现原来是应该按层级。
所以采用了先进先出的队列,队列里要包含二叉树的层级信息,所以构造一个pair。
vector<vector<int>> vecAns;if (!root) return vecAns;queue<pair<int, TreeNode*>> queueTree;
首先定义了用于最后返回的vecAns,而后判断root是否为空,是的话直接返回不做添加操作。构造的queue中int用于存放层级信息,TreeNode*用于存放节点。
接下来定义了map,它的优势在于可以随时指定键来添加值,这里就是指定层级来添加信息,后面的是vector就是用于存放树节点的。root的层级设定为0,后面用make_pair来构造pair对,最后添加到queue中。
map<int, vector<int>> mapAns;int rootLevel = 0;queueTree.push(make_pair(rootLevel, root));
只要queue不为空就一直循环。每次一开始就解析出当前队列顶部的层级信息以及当前节点,将它添加到map中。添加完之后就可以弹出了。继续判断左右子树,如果为空就先添加到queue中等待下一部操作。待到下一次循环时,就是将它们添加到map中了。
while (!queueTree.empty()) { int currentLevel = (queueTree.front().first); TreeNode *currentNode = (queueTree.front().second); mapAns[currentLevel].push_back(currentNode->val); queueTree.pop(); if (currentNode->left != NULL) queueTree.push(make_pair(currentLevel + 1, currentNode->left)); if (currentNode->right != NULL) queueTree.push(make_pair(currentLevel + 1, currentNode->right));}
将map中的信息逐个push到vector里,最后就直接return了。
for (auto iter = mapAns.rbegin(); iter != mapAns.rend(); ++iter) { vecAns.push_back(iter->second);}return vecAns;
Ok,大家可以去看看上一题:
LeetCode 102 Binary Tree Level Order Traversal(二叉树的层级顺序遍历)(*)
代码
/*** 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>> vecAns; if (!root) return vecAns; queue<pair<int, TreeNode*>> queueTree; map<int, vector<int>> mapAns; int rootLevel = 0; queueTree.push(make_pair(rootLevel, root)); while (!queueTree.empty()) { int currentLevel = (queueTree.front().first); TreeNode *currentNode = (queueTree.front().second); mapAns[currentLevel].push_back(currentNode->val); queueTree.pop(); if (currentNode->left != NULL) queueTree.push(make_pair(currentLevel + 1, currentNode->left)); if (currentNode->right != NULL) queueTree.push(make_pair(currentLevel + 1, currentNode->right)); } for (auto iter = mapAns.rbegin(); iter != mapAns.rend(); ++iter) { vecAns.push_back(iter->second); } return vecAns; }};
2 0
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层级顺序遍历)(*)
- LeetCode OJ 之 Binary Tree Level Order Traversal II (二叉树的层次遍历-二)
- LeetCode 107. Binary Tree Level Order Traversal II(二叉树分层遍历)
- 70.Binary Tree Level Order Traversal II-二叉树的层次遍历 II(中等题)
- Binary Tree Level Order Traversal, 二叉树层级遍历
- LeetCode | Binary Tree Level Order Traversal II(二叉树层序遍历II)
- LeetCode | Binary Tree Level Order Traversal(二叉树层序遍历)
- LeetCode-107-Binary Tree Level Order Traversal II(二叉树级序遍历<2>)
- Leetcode 107. Binary Tree Level Order Traversal II 二叉树层次遍历2 解题报告
- Binary Tree Level Order Traversal II 二叉树按层遍历(反向输出)@LeetCode
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- LeetCode OJ 之 Binary Tree Level Order Traversal (二叉树的层次遍历)
- LeetCode OJ 之 Binary Tree Zigzag Level Order Traversal (二叉树的曲线层次遍历)
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)
- Binary Tree Level Order Traversal II(层次遍历二叉树II)
- Binary Tree Level Order Traversal II 二叉树的同层遍历系列2
- Binary Tree Level Order Traversal II 二叉树层次遍历(广搜,queue)(重重)
- 对于linux下system()函数的深度理解(
- MySql简单doc操作
- 《看见》读书笔记
- iOS应用中如何跳转至App Store指定应用
- 混淆矩阵
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
- Android开发笔记--操纵字符串中的字符
- xampp中production的php.ini与默认的有何不同
- 用于将阿拉伯数字转成中文数字
- win8.1 Offline Files、Device Association Service和Network Connections
- 选择角点
- Apple 一个我越发看不懂的公司
- 【java web】--ojdbc导入xml数据
- listview适配器的初级优化