Leetcode笔记 每日一题 1305. 两棵二叉搜索树中的所有元素(22.05.01)
Leetcode 每日一题 1305. 两棵二叉搜索树中的所有元素(22.05.01)
题目
给你 root1
和 root2
这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.
示例1:
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
示例2:
输入:root1 = [1,null,8], root2 = [8,1]
输出:[1,1,8,8]
提示:
每棵树的节点数在 [0, 5000] 范围内
-105 <= Node.val <= 105
解题思路
题目要求我们返回一个列表包含两颗二叉树的所有整数节点并按有序排列。因此可以利用中序遍历结果是有序的,对两颗二叉树进行遍历,并把结果存放于列表res中,然后对res进行排序即可。
Python代码
# 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 getAllElements(self, root1: TreeNode, root2: TreeNode) -> List[int]:
# 中序遍历
def inorder(root , nums):
if not root:
return
inorder(root.left , nums)
nums.append(root.val)
inorder(root.right , nums)
nums = []
inorder(root1 , nums)
inorder(root2 , nums)
nums = sorted(nums) # 使用sorted()进行排序
return nums
以下是不使用sorted()函数进行排序
# 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 getAllElements(self, root1, root2):
def inorder(root, nums):
if not root:
return
inOrder(root.left, nums)
nums.append(root.val)
inOrder(root.right, nums)
# 分别初始化两个列表存放两颗二叉树中序遍历的结果
nums1 = []
nums2 = []
inorder(root1, nums1)
inorder(root2, nums2)
res = []
i , j = 0 , 0
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]:
res.append(nums1[i])
i += 1
else:
res.append(nums2[j])
j += 1
# 存在nums1和nums2长度不同的情况
# 当i<len(nums1)或者j<len(nums2)时,说明nums2(nums1)的数已经比较完了,nums1(nums2)剩下的数都会比nums2(nums1)最后一个数大,所以直接将nums1[i:](nums2[j:])后面的数插入res后面
'''
if i < len(nums1):
res.extend(nums1[i:])
if j < len(nums2):
res.extend(nums2[j:])
'''
res.extend(nums1[i:]+nums2[j:])