• leetcode1305 All Elements in Two Binary Search Trees


     1 """
     2 Given two binary search trees root1 and root2.
     3 Return a list containing all the integers from both trees sorted in ascending order.
     4 Example 1:
     5 Input: root1 = [2,1,4], root2 = [1,0,3]
     6 Output: [0,1,1,2,3,4]
     7 Example 2:
     8 Input: root1 = [0,-10,10], root2 = [5,1,7,0,2]
     9 Output: [-10,0,0,1,2,5,7,10]
    10 Example 3:
    11 Input: root1 = [], root2 = [5,1,7,0,2]
    12 Output: [0,1,2,5,7]
    13 Example 4:
    14 Input: root1 = [0,-10,10], root2 = []
    15 Output: [-10,0,10]
    16 Example 5:
    17 Input: root1 = [1,null,8], root2 = [8,1]
    18 Output: [1,1,8,8]
    19 """
    20 class TreeNode:
    21     def __init__(self, x):
    22         self.val = x
    23         self.left = None
    24         self.right = None
    25 
    26 """
    27 此题提供三种思路,与leetcode98类似,https://www.cnblogs.com/yawenw/p/12376942.html
    28 第一种是层次遍历,
    29 然后对存入的值sorted排序
    30 传送门:https://blog.csdn.net/qq_17550379/article/details/103838538
    31 """
    32 class Solution1:
    33     def getAllElements(self, root1, root2):
    34         q, res = [root1, root2], []
    35         while q:
    36             cur = q.pop(0)
    37             if cur:
    38                 res.append(cur.val)
    39                 if cur.left != None:
    40                     q.append(cur.left)
    41                 if cur.right != None:
    42                     q.append(cur.right)
    43         return sorted(res)
    44 
    45 """
    46 第二种是利用二叉搜索树的条件,
    47 对两个树分别中序遍历。这样两个list分别有序
    48 再进行归并排序
    49 """
    50 class Solution2:
    51     def getAllElements(self, root1, root2):
    52         q1, q2 = [], []
    53         res = []
    54         # 中序遍历
    55         def inorder(root, q):
    56             if root:
    57                 inorder(root.left, q)
    58                 q.append(root.val)
    59                 inorder(root.right, q)
    60         inorder(root1, q1)
    61         inorder(root2, q2)
    62         # 归并排序的方法
    63         while q1 or q2:
    64             if not q1:
    65                 res += q2
    66                 break
    67             if not q2:
    68                 res += q1
    69                 break
    70             else:
    71                 res.append(q1.pop(0) if q1[0] < q2[0] else q2.pop(0))
    72         return res
    73 
    74 """
    75 第三种是:
    76 先中序遍历(代替层次遍历)
    77 再sorted(代替归并排序)
    78 """
    79 class Solution3:
    80     def getAllElements(self, root1, root2):
    81         res = []
    82         def inOrder(root):
    83             if root:    #!!!bug 没有写次if语句
    84                 inOrder(root.left)
    85                 res.append(root.val)
    86                 inOrder(root.right)
    87         inOrder(root1)
    88         inOrder(root2)
    89         return sorted(res)
  • 相关阅读:
    C语言判断函数
    从函数调用来思考多态
    C语言读取每一行文本
    任务栏上的资源管理器图标,没有jump list?其他都有。
    The specified child already has a parent错误
    SQL语句的添加、删除、修改多种方法
    菜鸟开技术博啦
    若不能连接到sql server的localhost
    微软Live Mail包含重大Bug,可导致用户无法登录,我已经一个多月无法登录自己的邮箱了。 无为而为
    试试Communicator Web Access 中文版 无为而为
  • 原文地址:https://www.cnblogs.com/yawenw/p/12284717.html
Copyright © 2020-2023  润新知