代码随想录刷题day15

层序遍历、226.翻转二叉树 (优先掌握递归)、101. 对称二叉树 (优先掌握递归)

注:利用第102题二叉树的层序遍历模板可以完成十道题:加粗这几道题是做的不太好的。
102.二叉树的层序遍历
107.二叉树的层次遍历II
199.二叉树的右视图
637.二叉树的层平均值
429.N叉树的层序遍历
515.在每个树行中找最大值
116.填充每个节点的下一个右侧节点指针
117.填充每个节点的下一个右侧节点指针II
104.二叉树的最大深度
111.二叉树的最小深度

题目:102. 二叉树的层序遍历

代码:
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        dqueue = []
        if not root:
            return res
        dqueue.append(root)
        while dqueue:
            tmpsize = len(dqueue)
            re = []
            while tmpsize:
                tmp = dqueue.pop(0)
                re.append(tmp.val)
                if tmp.left:
                    dqueue.append(tmp.left)
                if tmp.right:
                    dqueue.append(tmp.right)
                tmpsize -= 1
            res.append(re)
        return res
题目:116. 填充每个节点的下一个右侧节点指针
题解:

仍然延用上一题的代码模式,最右侧节点的next不需要赋值,其他位置的节点指向队列中的下一个即可。

代码:
class Solution(object):
    def connect(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        res = []
        dqueue = []
        if not root:
            return root
        dqueue.append(root)
        while dqueue:
            tmpsize = len(dqueue)
            while tmpsize:
                tmp = dqueue.pop(0)
                if tmpsize > 1:
                    tmp.next = dqueue[0]
                if tmp.left:
                    dqueue.append(tmp.left)
                if tmp.right:
                    dqueue.append(tmp.right)
                tmpsize -= 1
        return root
题目:111. 二叉树的最小深度
代码:
class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        res = []
        dqueue = []
        if not root:
            return 0
        dqueue.append(root)
        num = 1
        offset = 1
        while dqueue:
            tmpsize = len(dqueue)
            
            while tmpsize:
                tmp = dqueue.pop(0)

                if (not tmp.left) and (not tmp.right):
                    return offset
                if tmp.left:
                    dqueue.append(tmp.left)
                if tmp.right:
                    dqueue.append(tmp.right)
                tmpsize -= 1
            offset += 1
        return offset
代码:
题目:翻转二叉树

注意:

其实就相当于把每一个节点的两个娃子节点互换,

class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        res = []
        dqueue = []
        if not root:
            return root
        dqueue.append(root)
        while dqueue:
            tmpsize = len(dqueue)
            while tmpsize:
                tmp = dqueue.pop(0)
               #这里要注意,如果左右孩子一个存在一个不存在依然要交换。
                tmpzhen = tmp.left
                tmp.left = tmp.right
                tmp.right = tmpzhen

                if tmp.left:
                    dqueue.append(tmp.left)
                if tmp.right:
                    dqueue.append(tmp.right)
                tmpsize -= 1
        return root

你可能感兴趣的:(leetcode,算法,数据结构)