算法
时间复杂度: O(n)
空间复杂度: O(h)
C++代码
class Solution {
public:
static vector<vector<int>> printFromTopToBottom(TreeNode *root) {
vector<vector<int>> res;
printFromTopToBottom(root, res, 0);
return res;
}
private:
static void printFromTopToBottom(TreeNode *node, vector<vector<int>> &res, size_t level) {
if (!node) {
return;
}
if (res.size() <= level) {
res.resize(level + 1);
}
vector<int> &levelArr = res[level];
levelArr.push_back(node->val);
printFromTopToBottom(node->left, res, level + 1);
printFromTopToBottom(node->right, res, level + 1);
}
};
Java代码
class Solution {
public static List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
printFromTopToBottom(root, res, 0);
return res;
}
private static void printFromTopToBottom(TreeNode node, List<List<Integer>> res, int level) {
if (node == null) {
return;
}
if (res.size() <= level) {
res.add(new ArrayList<>());
}
List<Integer> levelArr = res.get(level);
levelArr.add(node.val);
printFromTopToBottom(node.left, res, level + 1);
printFromTopToBottom(node.right, res, level + 1);
}
}
Python3代码
class Solution(object):
def printFromTopToBottom(self, root):
res = []
self.__printFromTopToBottom1(root, res, 0)
return res
def __printFromTopToBottom1(self, node, res, level):
if not node:
return
if len(res) <= level:
res.append([])
levelArr = res[level]
levelArr.append(node.val)
self.__printFromTopToBottom1(node.left, res, level + 1)
self.__printFromTopToBottom1(node.right, res, level + 1)