LeetCode37|两颗二叉搜索树中所有元素

时间:2022-07-23
本文章向大家介绍LeetCode37|两颗二叉搜索树中所有元素,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1,问题简述

给你 root1 和 root2 这两棵二叉搜索树。

请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。

2,示例

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

3,题解思路

数据统计

4,题解程序

 
import java.util.*;

public class GetAllElementsTest {
    public static void main(String[] args) {
        TreeNode t11 = new TreeNode(2);
        TreeNode t12 = new TreeNode(1);
        TreeNode t13 = new TreeNode(4);

        t11.left = t12;
        t11.right = t13;

        TreeNode t21 = new TreeNode(1);
        TreeNode t22 = new TreeNode(0);
        TreeNode t23 = new TreeNode(3);
        t21.left = t22;
        t21.right = t23;
        List<Integer> allElements = getAllElements(t11, t21);
        System.out.println("allElements = " + allElements);

    }

    public static List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        List<Integer> list = new ArrayList<>();
        if (root1 == null && root2 == null) {
            return list;
        }
        List<Integer> root1List = getNodeCount(root1);
        List<Integer> root2List = getNodeCount(root2);
        root1List.addAll(root2List);
        Collections.sort(root1List);
        return root1List;

    }

    private static List<Integer> getNodeCount(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Deque<TreeNode> deque = new LinkedList<>();
        if (root != null) {
            deque.add(root);
            while (!deque.isEmpty()) {
                int size = deque.size();
                for (int i = 0; i < size; i++) {
                    TreeNode node = deque.poll();
                    list.add(node.val);
                    if (node.left != null) {
                        deque.add(node.left);
                    }
                    if (node.right != null) {
                        deque.add(node.right);
                    }
                }
            }
        }
        return list;
    }
}

5,题解程序图片版

6,总结

队列的使用,队列的特点是先进先出,这个特性在以往的文章中说过了,前提是理解队列的使用,需要了解的可以看下这篇文章java进阶|java队列源码分析