【LeetCode 1305】All Elements in Two Binary Search Trees【Medium】【JAVA】

本文介绍了一种合并两个二叉搜索树的有效方法,通过中序遍历获取有序数组,然后合并数组得到最终结果,时间复杂度为O(n)。

1. 题目

在这里插入图片描述
题目链接:https://leetcode.com/problems/all-elements-in-two-binary-search-trees/

2. 题意

题目要求是合并两个搜索二叉树,合并成为一个List

3. 方法

3.1 思路

比较简单的做法,由于两棵树都是二叉搜索树,通过中序遍历,输出有序的数组,再将两个数组进行合并,时间复杂度上为O(n)

3.2 代码

    public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        List<Integer> list1 = new ArrayList<>();
        inorderTraversal(root1, list1);

        List<Integer> list2 = new ArrayList<>();
        inorderTraversal(root2, list2);

        List<Integer> list = new ArrayList<>();
        int i1 = 0, i2 = 0;
        while (i1 < list1.size() && i2 < list2.size()) {
            if (list1.get(i1) > list2.get(i2)) {
                list.add(list2.get(i2++));
            } else {
                list.add(list1.get(i1++));
            }
        }

        while (i1 < list1.size()) {
            list.add(list1.get(i1++));
        }
        while (i2 < list2.size()) {
            list.add(list2.get(i2++));
        }

        return list;
    }

	// 中序遍历
    private void inorderTraversal(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        inorderTraversal(root.left, list);
        list.add(root.val);
        inorderTraversal(root.right, list);
    }

3.3 运行结果

在这里插入图片描述

4. 相关链接

本题代码的github链接
LeetCode Top 100 Liked Questions 题目
其他LeetCode题目

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值