(待思考--不采用逆置等的思想)107. Binary Tree Level Order Traversal II
来源:互联网 发布:qq游戏大厅hd网络异常 编辑:程序博客网 时间:2024/04/27 18:37
107. 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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3]]
方法一、递归的方法:用到c++的反向迭代器
vector<vector<int> > result; void levelTra(TreeNode *root, int level) { if(root == NULL) return; if(level == result.size()) { vector<int> v; result.push_back(v); } result[level].push_back(root->val); levelTra(root->left, level+1); levelTra(root->right, level+1); } vector<vector<int> > levelOrderBottom(TreeNode *root) { levelTra(root, 0); return vector<vector<int> >(result.rbegin(), result.rend()); }
方法二、非递归的方法,层次遍历
(1)stack
vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> result; if(NULL == root) return vector<vector<int>>(); queue<TreeNode*> que; que.push(root); int countLevNodes = 1; vector<int> temp; stack<vector<int>> tempSta; while(!que.empty()) { TreeNode* tempTreeNode = que.front(); que.pop(); temp.push_back(tempTreeNode->val); countLevNodes--; if(tempTreeNode->left != NULL) que.push(tempTreeNode->left); if(tempTreeNode->right != NULL) que.push(tempTreeNode->right); if(countLevNodes == 0) { tempSta.push(temp); temp.clear(); countLevNodes = que.size(); } } while(!tempSta.empty()) { temp = tempSta.top(); tempSta.pop(); result.push_back(temp); } return result; }
(2)reverse
vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> result; if(NULL == root) return vector<vector<int>>(); queue<TreeNode*> que; que.push(root); int countLevNodes = 1; vector<int> temp; while(!que.empty()) { TreeNode* tempTreeNode = que.front(); que.pop(); temp.push_back(tempTreeNode->val); countLevNodes--; if(tempTreeNode->left != NULL) que.push(tempTreeNode->left); if(tempTreeNode->right != NULL) que.push(tempTreeNode->right); if(countLevNodes == 0) { result.push_back(temp); temp.clear(); countLevNodes = que.size(); } } reverse(result.begin(),result.end()); return result; }
0 0
- (待思考--不采用逆置等的思想)107. Binary Tree Level Order Traversal II
- 107.Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- 107. Binary Tree Level Order Traversal II
- Spark源码分析之-scheduler模块
- POI 动态合并单元格
- php 获取指定格式时间
- Vue组件slot的用法
- 程序员开发微信小程序前,一定要知道的几件事
- (待思考--不采用逆置等的思想)107. Binary Tree Level Order Traversal II
- 用Vs2013打开编译vs2012的工程 error MSB8020
- 新博客地址
- Tk的三个几何管理器
- 【Android 基础】ListView中使用ImageLoader
- Linux命令:locate
- spring-ws搭建webservice服务
- Spring Boot介绍 Spring Boot RESTfull API快速搭建
- javascript 的null和undefined