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

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題目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章