leecode第8天

88.合并两个有序数组
# 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
# 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
# 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。
# 为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

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、二叉对的中序遍历
# 给定一个二叉树的根节点 root ,返回 它的 中序 遍历【左-根-右】。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
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、对称二叉树
# 给你一个二叉树的根节点 root , 检查它是否轴对称。
# Definition for a binary tree node.
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)#镜像后相等即对称
Yes
No
Yes
No
开始
根节点为空?
返回True
定义reverse函数
生成镜像树
比较原树和镜像树
两棵树相同?
返回True
返回False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值