LeetCode 五月打卡-day01

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day01相关的知识,希望对你有一定的参考价值。

必须拿下五月勋章

2022.5.1

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

中序遍历+ 归并排序
中序遍历这两棵二叉搜索树,可以得到两个有序数组。然后可以使用双指针方法来合并这两个有序数组,这一方法将两个数组看作两个队列,每次从队列头部取出比较小的数字放到结果中(头部相同时可任取一个)。

https://www.runoob.com/java/java-arraylist-sublist.html
subList() 方法用于截取并返回动态数组中的一部分。
subList() 方法的语法为:
arraylist.subList(int fromIndex, int toIndex)
注:arraylist 是 ArrayList 类的一个对象。
参数说明:
fromIndex - 截取元素的起始位置,包含该索引位置元素
toIndex - 截取元素的结束位置,不包含该索引位置元素

/**
 * 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<Integer> getAllElements(TreeNode root1, TreeNode root2) 
        List<Integer> res1 = new ArrayList<>();
        List<Integer> res2 = new ArrayList<>();

        inorder(root1, res1);
        inorder(root2, res2);

        List<Integer> merge = new ArrayList<Integer>();
        //双指针
        int p1 = 0, p2 = 0;
        while (true) 
            if (p1 == res1.size()) 
                merge.addAll(res2.subList(p2, res2.size()));
                break;
            
            if (p2 == res2.size()) 
                merge.addAll(res1.subList(p1, res1.size()));
                break;
            
            
            if (res1.get(p1) < res2.get(p2)) 
                merge.add(res1.get(p1++));
             else 
                merge.add(res2.get(p2++));
            
        
        return merge;
    

    //中序遍历
    public void inorder(TreeNode root, List<Integer> res) 
        if (root != null) 
            inorder(root.left, res);
            res.add(root.val);
            inorder(root.right, res);
        
    

/**
 * 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 
    List<Integer> res;
    public List<Integer> getAllElements(TreeNode root1, TreeNode root2) 
        res = new ArrayList<>();
        dfs(root1);
        dfs(root2);

        Collections.sort(res);
        return res;


    

    public void dfs(TreeNode root)
        if(root == null)
            return;
        

        dfs(root.left);
        res.add(root.val);
        dfs(root.right);

    

以上是关于LeetCode 五月打卡-day01的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 五月打卡-day12

LeetCode 五月打卡-day11

LeetCode 五月打卡-day19

LeetCode 五月打卡-day07

LeetCode 五月打卡-day20

LeetCode 五月打卡-day08