0
点赞
收藏
分享

微信扫一扫

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

infgrad 2022-05-01 阅读 72

解题思路

搜索树中序遍历即为升序排列,对两个根进行dfs在把序列组合

代码

/**
 * 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> res = new ArrayList<>();
        List<Integer> t1 = new ArrayList<>();
        if (root1 != null){
            dfs(root1,t1);
        }
        List<Integer> t2 = new ArrayList<>();
        if (root2 != null){
            dfs(root2,t2);
        }
        int index1 = 0,index2 = 0;
        while (index1 != t1.size() && index2 != t2.size()){
            final int n1 = t1.get(index1);
            final int n2 = t2.get(index2);
            if (n1 < n2){
                res.add(n1);
                index1++;
            }
            else if (n1 > n2){
                res.add(n2);
                index2++;
            }
            else if(n1 == n2){
                res.add(n1);
                res.add(n2);
                index1++;
                index2++;
            }
        }
        if (index1 != t1.size()){
            while (index1 != t1.size()){
                res.add(t1.get(index1));
                index1++;
            }
        }
        if (index2 != t2.size()){
            while (index2 != t2.size()){
                res.add(t2.get(index2));
                index2++;
            }
        }
        return res;
    }
    public void dfs(TreeNode root, List<Integer> list){
        if (root.left != null){
            dfs(root.left,list);
        }
        list.add(root.val);
        if (root.right != null){
            dfs(root.right,list);
        }
    }
}
举报

相关推荐

0 条评论