Leetcode107 二叉树的层次遍历II(二叉树基本操作,层次遍历)

这篇博客详细介绍了Leetcode107题的解决方案,即如何进行二叉树的自底向上层次遍历。内容包括解题难点、递归方法的运用以及在递归中处理深度信息的关键点。提供的Python代码示例展示了如何在递归过程中创建新数组并根据深度添加元素。
摘要由CSDN通过智能技术生成

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 

需要注意的几个问题:

  1. depth这个信息用在了两处,一处是判断是否创造新的数组,一处使作为添加深度层元素的索引
  2. 函数内部其实也是可以写函数的,并且两者共用变量,还一种代码如下
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值