leetcode102. 二叉树的层次遍历

leetcode 102.二叉树的层次遍历 (leetcode 103.二叉树的锯齿形层次遍历就是在102的基础上判断了奇偶数倒序。就不另写了)

两种解题思路:

1.深度优先搜索,记录每个节点是第几层的,然后先左后右的一层一层的往res的结果里面加。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        #深度优先遍历 dfs
        #levels里保存了多个list,每个list保存了一层的节点值
        levels=[]
        def dfs(root,level):
            #如果传入的节点是None 那么直接退出该次
            if not root:
               return 0
            #相等的时候说明到了下一层,需要把下一层的list新建,然后往里添加节点值
            if len(levels)==level:
                levels.append([])
            #把节点的值添加进这个层的末尾,先走的左节点,再右节点
            levels[level].append(root.val)
            if  root.left :
                dfs(root.left,level+1)
            if root.right:
                dfs(root.right,level+1)
        #进行递归 
        dfs(root,0)
        return levels

2.广度优先搜索,直接遍历每层的节点,然后把每层的节点保存,再遍历下一层的节点。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        result=[]
        if not root:
            return result
        #从根节点开始
        cur_level=[root]
        #如果当前层存在节点那么开始遍历,并将下层的节点添加进next_level
        #将该层节点值添加进tmp,然后将每层的tmp添加进最终的result结果
        while cur_level:
            tmp=[]
            next_level=[]
            for cur in cur_level:
                tmp.append(cur.val)
                if cur.left:
                    next_level.append(cur.left)
                if cur.right:
                    next_level.append(cur.right)
            result.append(tmp)
            cur_level=next_level
        return result

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值