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

算法记录

LeetCode 题目:

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



说明

一、题目

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

二、分析

  • 二插搜索树的特点就是按照中序遍历的序列是一个升序数组。
  • 也就是只要中序遍历之后合并两条序列即可,用归并合并的方式进行合并。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    
    
    public List merge(List<Integer> l1, List<Integer> l2) {
    
    
        List<Integer> ans = new ArrayList();
        for(int i = 0, j = 0; i < l1.size() || j < l2.size(); ) {
    
    
            if(j >= l2.size() || (i < l1.size() && l1.get(i) < l2.get(j))) {
    
    
                ans.add(l1.get(i));
                i++;
            } else {
    
    
                ans.add(l2.get(j));
                j++;
            }
        }
        return ans;
    }
    public void inOrder(TreeNode root, List order) {
    
    
        if(root == null) return ;
        inOrder(root.left, order);
        order.add(root.val);
        inOrder(root.right, order);
    }
    public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
    
    
        List<Integer> h1 = new ArrayList(), h2 = new ArrayList();
        inOrder(root1, h1);
        inOrder(root2, h2);
        return merge(h1, h2);
    }
}

总结

熟悉二插搜索树的性质特点、树的遍历方法、归并的合并操作。

Guess you like

Origin blog.csdn.net/MTYSYS19990212/article/details/120395351