1. 题目描述

https://leetcode-cn.com/problems/all-elements-in-two-binary-search-trees/
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.
示例 1:
1305. 两棵二叉搜索树中的所有元素 - 图1
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
示例 2:
1305. 两棵二叉搜索树中的所有元素 - 图2

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

  • 每棵树的节点数在 1305. 两棵二叉搜索树中的所有元素 - 图3 范围内
  • 1305. 两棵二叉搜索树中的所有元素 - 图4

    2. 题解

    2022-05-01 AC, 二叉树目前还是十分懵逼, 看题解还是挺好理解的, 2棵树递归拿到数组, 然后组合一下就是结果 ```php <?php /**

//Definition for a binary tree node. class TreeNode { public $val = null; public $left = null; public $right = null;

  1. function __construct($val = 0, $left = null, $right = null)
  2. {
  3. $this->val = $val;
  4. $this->left = $left;
  5. $this->right = $right;
  6. }

}

class Solution {

/**
 * @param TreeNode $root1
 * @param TreeNode $root2
 * @return Integer[]
 */
function getAllElements($root1, $root2)
{
    $ans = $l1 = $l2 = [];
    $this->dfs($root1, $l1);
    $this->dfs($root2, $l2);
    $i = $j = 0;
    $len1 = count($l1);
    $len2 = count($l2);
    while ($i < $len1 || $j < $len2) {
        $a = $i < $len1 ? $l1[$i] : PHP_INT_MAX;
        $b = $j < $len2 ? $l2[$j] : PHP_INT_MAX;
        if ($a <= $b) {
            $ans[] = $a;
            $i++;
        } else {
            $ans[] = $b;
            $j++;
        }
    }
    return $ans;
}

function dfs($root, &$list)
{
    if ($root == null)
        return;
    $this->dfs($root->left, $list);
    $list[] = $root->val;
    $this->dfs($root->right, $list);
}

public $ans = [];

function getAllElements优化($root1, $root2)  //这个写法就很好理解了, 哈哈
{
    $this->dfs2($root1);
    $this->dfs2($root2);
    sort($this->ans);
    return $this->ans;
}

function dfs2($root)
{
    if ($root == null)
        return;
    $this->dfs2($root->left);
    $this->ans[] = $root->val;
    $this->dfs2($root->right);
}

}

/**

  • 执行用时:104 ms, 在所有 PHP 提交中击败了50.00%的用户
  • 内存消耗:23.6 MB, 在所有 PHP 提交中击败了100.00%的用户
  • 通过测试用例:48 / 48 */ ```