88.合并两个有序数组
class Solution(object):
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: None Do not return anything, modify nums1 in-place instead.
"""
for i in range(n):
nums1[i+m]=nums2[i]
nums1.sort()
def merge(self, nums1, m, nums2, n):
"""
:type nums1: List[int]
:type m: int
:type nums2: List[int]
:type n: int
:rtype: None Do not return anything, modify nums1 in-place instead.
"""
if m== 0 or n==0:
if m ==0:
for i in range(n):
nums1[i] = nums2[i]
return nums1
else:
return nums1
else:
nums1[m:] = nums2
nums1.sort()
94、二叉对的中序遍历
class Solution:
def inorderTraversal(self, root):
"""
实现二叉树的中序遍历
:param root: 二叉树的根节点,可能为None
:return: 返回一个列表,包含中序遍历的结果
"""
lst = []
def inorder(root):
"""
递归函数,用于执行中序遍历
:param root: 当前遍历的节点
"""
if not root:
return
inorder(root.left)
lst.append(root.val)
inorder(root.right)
inorder(root)
return lst
""""
【例】
4
/ \
2 5
/ \
1 3
详细步骤【套娃,层层返回,第四步返回到inorder(2)的lst.append(root.val)中】:
1、从根节点 4 开始:
检查 4 的左子节点 2,不为空,递归调用 inorder(2)。
2、处理节点 2:
检查 2 的左子节点 1,不为空,递归调用 inorder(1)。
3、处理节点 1:
检查 1 的左子节点,发现为空,直接访问 1 的值 1 并将其添加到结果列表 lst 中。
检查 1 的右子节点,发现为空,返回。
4、返回到节点 2:
访问 2 的值 2 并将其添加到结果列表 lst 中。
检查 2 的右子节点 3,不为空,递归调用 inorder(3)。
5、处理节点 3:
检查 3 的左子节点,发现为空,直接访问 3 的值 3 并将其添加到结果列表 lst 中。
检查 3 的右子节点,发现为空,返回。
6、返回到根节点 4:
访问 4 的值 4 并将其添加到结果列表 lst 中。
检查 4 的右子节点 5,不为空,递归调用 inorder(5)。
7、处理节点 5:
检查 5 的左子节点,发现为空,直接访问 5 的值 5 并将其添加到结果列表 lst 中。
检查 5 的右子节点,发现为空,返回。
最终,结果列表 lst 为 [1, 2, 3, 4, 5]。
""""
101、对称二叉树
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution(object):
def isSameTree(self, p, q):
"""
判断两棵二叉树是否相同。
参数:
:type p: Optional[TreeNode] - 二叉树的根节点
:type q: Optional[TreeNode] - 二叉树的根节点
返回值:
:rtype: bool - 如果两棵树相同返回True,否则返回False
"""
if not p and not q:
return True
elif not p or not q:
return False
elif p.val != q.val:
return False
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
def isSymmetric(self, root):
"""
判断给定的二叉树是否为对称的。
:type root: Optional[TreeNode] - 二叉树的根节点
:rtype: bool - 如果二叉树是对称的,则返回True,否则返回False
"""
if not root:
return True
def reverse(node):
"""
创建给定节点的镜像树。
:param node: TreeNode - 当前节点
:return: TreeNode - 给定节点的镜像树的根节点
"""
if not node:
return None
new_node = TreeNode(node.val)
new_node.left = reverse(node.right)
new_node.right = reverse(node.left)
return new_node
root_reverse = reverse(root)
return self.isSameTree(root, root_reverse)