代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树

 102.二叉树的层序遍历

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第1张图片

# 递归法
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        def helper(root, depth):
            if not root: return []
            if len(res) == depth: res.append([]) # start the current depth
            res[depth].append(root.val) # fulfil the current depth
            if  root.left: helper(root.left, depth + 1) # process child nodes for the next depth
            if  root.right: helper(root.right, depth + 1)
        helper(root, 0)
        return res

 107.二叉树的层次遍历 II

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第2张图片

多了results.reverse()

199.二叉树的右视图

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第3张图片

 637.二叉树的层平均值

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第4张图片

 多算一个sum

429.N叉树的层序遍历

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第5张图片

 515.在每个树行中找最大值

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第6张图片

116.填充每个节点的下一个右侧节点指针

在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了。链表解法相对容易一些。

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第7张图片 

 117.填充每个节点的下一个右侧节点指针II

和上一题异曲同工,只不过这个是普通二叉树,上一题是完全二叉树 

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第8张图片

 104.二叉树的最大深度

主要就是看层序遍历有几层

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第9张图片

111.二叉树的最小深度

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第10张图片 

226.翻转二叉树

还是递归方便
代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第11张图片

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第12张图片代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第13张图片

 101. 对称二叉树

太复杂了这个题,二刷再看

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第14张图片

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第15张图片 

代码随想录算法训练营day15 | 二叉树二叉树一堆二叉树_第16张图片 

层次遍历法

Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True

        que = [root]
        while que:
            this_level_length = len(que)
            for i in range(this_level_length // 2):
                # 要么其中一个是None但另外一个不是
                if (not que[i] and que[this_level_length - 1 - i]) or (que[i] and not que[this_level_length - 1 - i]):
                    return False
                # 要么两个都不是None
                if que[i] and que[i].val != que[this_level_length - 1 - i].val:
                    return False
            for i in range(this_level_length):
                if not que[i]: continue
                que.append(que[i].left)
                que.append(que[i].right)
            que = que[this_level_length:]
        return True

 

 

 

 

 

你可能感兴趣的:(代码随想录打卡,数据结构)