Leetcode107 二叉树的层次遍历II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
题目难度:简单
初次解题,没有找到头绪,知道可以采用递归的方法,但是想好如何处理深度的问题。
看了解答才知道需要将深度信息也带入递归
代码如下:
# 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]]
"""
return self.nodenumber(root, 0, [])
def nodenumber(self, root, depth, ans):
if not root:
return ans
if len(ans) == depth:
ans.insert(0,[])
ans[-(depth+1)].append(root.val) # 深度信息作为索引
self.nodenumber(root.left, depth+1,ans)
self.nodenumber(root.right, depth+1, ans)
return ans
需要注意的几个问题:
- depth这个信息用在了两处,一处是判断是否创造新的数组,一处使作为添加深度层元素的索引
- 函数内部其实也是可以写函数的,并且两者共用变量,还一种代码如下
class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res=[]
if not root: return res
def backtrack(node, level): # 函数内部嵌套了函数,两者公用变量,最后的return res可以删除。
if len(res)==level:
res.append([])
res[level].append(node.val)
if node.left:
backtrack(node.left, level+1)
if node.right:
backtrack(node.right, level+1)
return res
backtrack(root, 0)
res = res[::-1]
return res