226.反转二叉树
# 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]:
self.traverse(root)
return root
def traverse(self,root):#本题用遍历的方法解决
if root==None:
return []
root.left,root.right=root.right,root.left
self.traverse(root.left)
self.traverse(root.right)
101.对称二叉树
这道题要想清楚终止条件。
- 左子树为空,右子树不为空
- 左子树不为空,右子树为空
- 左右都为空。
所以我们根据这三种情况,可以用两行代码进行概括
if left is None or right is None:
return left==right
# 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 root is None:
return True
return self.check(root.left,root.right)
def check(self,left,right):
if left is None or right is None:
return left==right
if left.val != right.val:
return False
return self.check(left.right,right.left) and self.check(left.left,right.right)
111.二叉树的最小深度
这个解法更自然一些
# 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:
return self.get_depth(root)
def get_depth(self,root):
if not root:
return 0
left_depth=self.get_depth(root.left)
right_depth=self.get_depth(root.right)
if root.left is None and root.right is not None:
return 1+right_depth
if root.right is None and root.left is not None:
return 1+left_depth
return 1+min(left_depth,right_depth)