3个月用python刷完leetcode600题!-树简单题(一)

十五天的时间,刷完了所有的简单题,避免遗忘,所以开始简单题的二刷,第一遍刷题的时候过得速度比较快,因为我觉得基础不好的我,不要硬着头皮去想最优的方法,而是应该尽量去学一些算法思想,所以每道题只给自己5-10分钟的时间想,想不出来的就去找相关的答案,所以刷的比较快。二刷的时候按照leetcode官方给出的题目分类展开,同时,将解题思路记录于加深印象。
想要一起刷题的小伙伴,我们一起加油吧!
我的github连接:https://github.com/princewen/leetcode_python

100. Same Tree

100. Same Tree

递归的判断两个数是否相等,并判断两棵树时候同时为空,即结构是否相等。

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        if p and q:
            if p.val == q.val and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right):
                return True
            else:
                return False
        return p is q

104. Maximum Depth of Binary Tree

104. Maximum Depth of Binary Tree

递归调用

# 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 maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        left = self.maxDepth(root.left)+1
        right = self.maxDepth(root.right)+1
        return max(left,right)

107. Binary Tree Level Order Traversal II

3个月用python刷完leetcode600题!-树简单题(一)_第1张图片
107. Binary Tree Level Order Traversal II

这里我们采用深度优先遍历的方式得到结果的输出:
(1) 树的根结点入栈

(2)判断栈是否为空,不为空,则出栈,并输出出栈树结点的值

(3)出栈树结点的右子树入栈

(4)出栈树结点的左子树入栈

(5)循环回到(2)

# 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]]
        """
        stack = [(root,0)]
        res = []
        while stack!=[]:
            node,level = stack.pop()
            if node:
                if len(res) < (level+1):
                    res.insert(0,[])
                res[-(level+1)].append(node.val)
                stack.append((node.right,level+1))
                stack.append((node.left,level+1))
        return res

108. Convert Sorted Array to Binary Search Tree

108. Convert Sorted Array to Binary Search Tree

AVL tree 是一种特殊的二叉查找树,,首先我们要在树中引入平衡因子balance,表示结点右子树的高度减去左子树的高度差(右-左),对于一棵AVL树要么它是一棵空树,要么它是一棵高度平衡的二叉查找树,平衡因子balance绝对值不超过1.所以这里直接将一半元素放入左子树,一半元素放入右子树即可。

# 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 sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None
        mid = len(nums) / 2
        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

112. Path Sum

3个月用python刷完leetcode600题!-树简单题(一)_第2张图片
112. Path Sum

用递归的方法,只要有一条路径满足条件即可,而不是返回所有的可行路径,所以相对简单。


# 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 hasPathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype: bool
        """
        if not root:
            return False
        if root.left == None and root.right == None and root.val == sum:
            return True
        return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)

226. Invert Binary Tree

3个月用python刷完leetcode600题!-树简单题(一)_第3张图片
226. Invert Binary Tree

就是将每个节点的左右子树互换,使用递归:

# 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 invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root:
            root.left,root.right = self.invertTree(root.right),self.invertTree(root.left)
            return root

如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!
如果大家对leetcode感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!:


3个月用python刷完leetcode600题!-树简单题(一)_第4张图片
我的微信

你可能感兴趣的:(3个月用python刷完leetcode600题!-树简单题(一))