DFS 归并排序
方法一DFS + 归并排序
首先中序遍历两颗数,由于二叉树的性质,中序遍历得到的两个数组是有序的,然后对两个数组进行归并排序得出答案
参考代码
# 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 = rightclass Solution:def getAllElements(self, root1: TreeNode, root2: TreeNode) -> List[int]:def dfs(root,res):if root:dfs(root.left,res)res.append(root.val)dfs(root.right,res)nums1,nums2 = [],[]dfs(root1,nums1)dfs(root2,nums2)merged = []p1, n1 = 0, len(nums1)p2, n2 = 0, len(nums2)while True:if p1 == n1:merged.extend(nums2[p2:])breakelif p2 == n2:merged.extend(nums1[p1:])breakelif nums1[p1] > nums2[p2]:merged.append(nums2[p2])p2 += 1else:merged.append(nums1[p1])p1 += 1return merged
复杂度分析
时间复杂度:O(n+m),其中 n 和 m 分别为两棵二叉搜索树的节点个数。
空间复杂度:O(n+m)。存储数组以及递归时的栈空间均为 O(n+m)。
