Binary Tree Level Order Traversal II
2016-06-10 23:11
447 查看
c++
/** * 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) { if (root == nullptr) return vector<vector<int>>(0); vector<vector<int>> res; getLeaf(root, res, 0); reverse(res.begin(), res.end()); return res; } private: void getLeaf(const TreeNode* root, vector<vector<int>> &res, int depth) { depth++; if (res.size() < depth) { vector<int> tmp(1,root->val); res.push_back(tmp); } else { res[depth - 1].push_back(root->val); } if (root->left == nullptr && root->right == nullptr) return; if (root->left != nullptr) getLeaf(root->left, res, depth); if (root->right != nullptr) getLeaf(root->right, res, depth); } };
python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if not root: return [] res = [] self.getLeaf(root, res, 0) return res[::-1] def getLeaf(self, root, res, depth): depth += 1 if len(res) < depth: tmp = [root.val] res.append(tmp) else: res[depth-1].append(root.val) if not root.left and not root.right: return if root.left: self.getLeaf(root.left, res, depth) if root.right: self.getLeaf(root.right, res, depth)
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例