美文网首页
LeetCode #1305 All Elements in T

LeetCode #1305 All Elements in T

作者: air_melt | 来源:发表于2022-09-10 13:45 被阅读0次

    1302 Deepest Leaves Sum 层数最深叶子节点的和

    Description:

    Given two binary search trees root1 and root2, return a list containing all the integers from both trees sorted in ascending order.

    Example:

    Example 1:

    [图片上传失败...(image-91e7f4-1662788735043)]

    Input: root1 = [2,1,4], root2 = [1,0,3]
    Output: [0,1,1,2,3,4]

    Example 2:

    [图片上传失败...(image-1ca25d-1662788735043)]

    Input: root1 = [1,null,8], root2 = [8,1]
    Output: [1,1,8,8]

    Constraints:

    The number of nodes in each tree is in the range [0, 5000].
    -10^5 <= Node.val <= 10^5

    题目描述:

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

    示例:

    示例 1:

    [图片上传失败...(image-a03502-1662788735043)]

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

    示例 2:

    [图片上传失败...(image-173ed9-1662788735043)]

    输入:root1 = [1,null,8], root2 = [8,1]
    输出:[1,1,8,8]

    提示:

    每棵树的节点数在 [0, 5000] 范围内
    -10^5 <= Node.val <= 10^5

    思路:

    1. 迭代
      中序遍历
      用栈进行中序遍历, 同时合并较小值到结果中
      时间复杂度为 O(n), 空间复杂度为 O(n)
    2. 递归
      先中序遍历然后排序
      时间复杂度为 O(nlgn), 空间复杂度为 O(n)

    代码:

    C++:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution 
    {
    public:
        vector<int> getAllElements(TreeNode* root1, TreeNode* root2) 
        {
            vector<int> result;
            stack<TreeNode*> s1, s2;
            while (!s1.empty() or !s2.empty() or root1 or root2)
            {
                while (root1)
                {
                    s1.push(root1);
                    root1 = root1 -> left;
                }
                while (root2)
                {
                    s2.push(root2);
                    root2 = root2 -> left;
                }
                int cur1 = s1.empty() ? INT_MAX : s1.top() -> val, cur2 = s2.empty() ? INT_MAX : s2.top() -> val;
                if (cur1 < cur2) 
                {
                    root1 = s1.top() -> right;
                    s1.pop();
                }
                else
                {
                    root2 = s2.top() -> right;
                    s2.pop();
                }
                result.emplace_back(min(cur1, cur2));
            }
            return result;
        }
    };
    

    Java:

    /**
     * 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> result = new ArrayList<>();
            dfs(result, root1);
            dfs(result, root2);
            Collections.sort(result);
            return result;
        }
        
        private void dfs(List<Integer> result, TreeNode root) {
            if (root != null) {
                result.add(root.val);
                dfs(result, root.left);
                dfs(result, root.right);
            }
        }
    }
    

    Python:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def getAllElements(self, root1: TreeNode, root2: TreeNode) -> List[int]:
            return heapq.merge((f := lambda r: r and [*f(r.left), r.val, *f(r.right)] or [])(root1), f(root2))
    

    相关文章

      网友评论

          本文标题:LeetCode #1305 All Elements in T

          本文链接:https://www.haomeiwen.com/subject/nkzznrtx.html