美文网首页leetcode算法
1305. 两棵二叉搜索树中的所有元素 - 每日一题

1305. 两棵二叉搜索树中的所有元素 - 每日一题

作者: 刘翊扬 | 来源:发表于2022-05-01 18:30 被阅读0次

给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。

示例 1:

image.png
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]

示例 2:

image.png
输入:root1 = [1,null,8], root2 = [8,1]
输出:[1,1,8,8]

提示:

每棵树的节点数在 [0, 5000] 范围内
-105 <= Node.val <= 105

方法一:先遍历 + 再排序

public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        List<Integer> ans = new ArrayList<>();
        Queue<TreeNode> queue = new ArrayDeque<>();
        if (root1 != null) {
            queue.add(root1);
        }
        if (root2 != null) {
            queue.add(root2);
        }
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                ans.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }
        return ans.stream().sorted().collect(Collectors.toList());
    }

方法二:中序遍历 + 归并

public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        List<Integer> nums1 = new ArrayList<>();
        List<Integer> nums2 = new ArrayList<>();
        inOrder(root1, nums1);
        inOrder(root2, nums2);

        List<Integer> merge = new ArrayList<>();
        // 归并排序
        int p1 = 0, p2 = 0;
        while (true) {
            if (p1 == nums1.size()) {
                merge.addAll(nums2.subList(p2, nums2.size()));
                break;
            }

            if (p2 == nums2.size()) {
                merge.addAll(nums1.subList(p1, nums1.size()));
                break;
            }
            if (nums1.get(p1) < nums2.get(p2)) {
                merge.add(nums1.get(p1++));
            } else {
                merge.add(nums2.get(p2++));
            }
        }
        return merge;
    }


    void inOrder(TreeNode treeNode, List<Integer> res) {
        if (treeNode == null) {
            return;
        }
        inOrder(treeNode.left, res);
        res.add(treeNode.val);
        inOrder(treeNode.right, res);
    }

相关文章

  • 1305. 两棵二叉搜索树中的所有元素 - 每日一题

    给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排...

  • LC吐血整理之-weekly_contest

    12.29开始做周赛! 169场周赛 5296.两棵二叉搜索树中的所有元素 我的做法:遍历两棵二叉搜索树得到两个数...

  • LeetCode 1305. 两棵二叉搜索树中的所有元素

    题目 给你 root1 和 root2 这两棵二叉搜索树。 请你返回一个列表,其中包含 两棵树 中的所有整数并按 ...

  • 501-二叉搜索树中的众数

    二叉搜索树中的众数 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)...

  • 二叉搜索树

    二叉搜索树 定义 一棵二叉搜索树需要满足以下条件: 是一棵二叉树 对于树中任意节点,所有左子树元素都小于该节点,所...

  • Java日记2018-05-19

    第一题 二叉搜索树的第 K 个结点二叉搜素树的中序遍历访问队列,自然的满足升序排序的条件,中序遍历二叉搜索树找到第...

  • 【leetcode-树】二叉搜索树中第K小的元素

    【leetcode-树】二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找...

  • 数据结构-平衡二叉树

    定义 平衡二叉树,是对二叉搜索树的一种优化。 向二叉搜索树中插入元素时,不同的插入次序,将构造出不同结构的树。通俗...

  • Linux 内核常用数据结构

    红黑树 具有二叉搜索树的所有性质(lchild为较小元素, rchild为较大元素) 根节点是黑色的 所有叶子节点...

  • 算法 - 二叉搜索树

    二叉搜索树 查找 BST 中的某个元素 从有序数组构造一个二叉查找树 往 BST 中插入元素 BST 转成有序数组...

网友评论

    本文标题:1305. 两棵二叉搜索树中的所有元素 - 每日一题

    本文链接:https://www.haomeiwen.com/subject/buypyrtx.html