LeetCode OJ:Binary Tree Level Order Traversal II
2014-01-22 03:06
447 查看
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], ]
confused what
"{1,#,2,3}"means? >
read more on how binary tree is serialized on OJ.
算法思想:
从前往后,从右向左处理完,然后逆序输出
/** * 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>> result; if(!root)return result; list<list<int>> r; list<int> t; int curLev=1; int nextLev=0; queue<TreeNode *> que; que.push(root); while(!que.empty()){ TreeNode *cur=que.front(); que.pop(); t.push_front(cur->val); if(cur->right){ nextLev++; que.push(cur->right); } if(cur->left){ nextLev++; que.push(cur->left); } if(--curLev==0){ r.push_front(t); t.clear(); curLev=nextLev; nextLev=0; } } for(auto &v:r){ vector<int> k; for(int i:v){ k.push_back(i); } result.push_back(k); } return result; } };
递归版
/** * 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>> result; traverse(root,1,result); reverse(result.begin(),result.end()); return result; } void traverse(TreeNode *root,size_t level,vector<vector<int>> &result){ if(!root)return; if(level>result.size()) result.push_back(vector<int>()); result[level-1].push_back(root->val); traverse(root->left,level+1,result); traverse(root->right,level+1,result); } };
相关文章推荐
- Python-Project Euler 83
- LeetCode OJ:Convert Sorted Array to Binary Search Tree
- LeetCode OJ:Convert Sorted List to Binary Search Tree
- LeetCode OJ:Balanced Binary Tree
- iis 应用程序池看不到 .net framework 4.0
- 【生物信息学】使用genome 作为ref时,由bam格式 or pileup格式 计算 depth 的 cpp程序
- 基于CAS操作的非阻塞算法
- 多线程的代价及上下文切换
- 死锁,活锁和饥饿
- linux――Mplayer
- Android 键盘事件处理过程
- HMM model 例子 Biased coins
- Java中equals,hashcode
- POJ 3123 Ticket to Ride
- 理解HashMap的原理
- centos minimal 安装无法自定义分区
- [leet code] Length of Last Word
- 一个人的旅行(Dijkstra算法)
- 关于windows7安装python、pip、virtualenv
- winedit 永久试用的办法