226. 翻转二叉树
翻转一棵二叉树。
这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树,最后被Google拒绝了。(真假不做判断,全当一个乐子哈)
第一种方法(递归法):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return root
def traversedfs(node):
if node:
node.left, node.right = node.right, node.left
traversedfs(node.left)
traversedfs(node.right)
traversedfs(root)
return root
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
第一种方法(递归法-后序遍历):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
def compare(left, right):
if left == None and right != None:
return False
elif left != None and right == None:
return False
elif left == None and right == None:
return True
elif left.val != right.val:
return False
outside = compare(left.left, right.right)
inside = compare(left.right, right.left)
result = outside and inside
return result
return compare(root.left, root.right)
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
第一种方法( 递归法-后序遍历-通过求高度来得到深度):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
def getheight(node):
if not node:
return 0
leftheight = getheight(node.left)
rightheight = getheight(node.right)
height = 1 + max(leftheight, rightheight)
return height
return getheight(root)
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
第一种方法( 递归法-后序遍历-通过高度得到深度):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
def getheight(node):
if not node:
return 0
leftheight= getheight(node.left)
rightheight = getheight(node.right)
if not node.left and node.right:
return 1 + rightheight
if node.left and not node.right:
return 1 + leftheight
return 1 + min(leftheight, rightheight)
return getheight(root)