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

题目:

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

分析:

前序遍历,变成两个有序数组,然后归并。

// date 2023/10/30
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func getAllElements(root1 *TreeNode, root2 *TreeNode) []int {
    s1 := bst2array(root1)
    s2 := bst2array(root2)
    ans := make([]int, 0, 16)
    i, j := 0, 0
    k1, k2 := len(s1), len(s2)
    for i < k1 || j < k2 {
        if i >= k1 {
            break
        }
        if j >= k2 {
            break
        }
        if s1[i] < s2[j] {
            ans = append(ans, s1[i])
            i++
        } else {
            ans = append(ans, s2[j])
            j++
        }
    }

    if i < k1 {
        ans = append(ans, s1[i:]...)
    }
    if j < k2 {
        ans = append(ans, s2[j:]...)
    }

    return ans
}

func bst2array(r1 *TreeNode) []int {
    ans := make([]int, 0, 16)

    var dfs func(root *TreeNode)
    dfs = func(root *TreeNode) {
        if root == nil {
            return
        }
        dfs(root.Left)
        ans = append(ans, root.Val)
        dfs(root.Right)
    }

    dfs(r1)

    return ans
}

最后更新于