LeetCode/all-elements-in-two-binary-.../nodejs/index.js

140 lines
3.1 KiB
JavaScript
Raw Normal View History

/*
*
* Given two binary search trees root1 and root2.
* Return a list containing all the integers from both trees sorted in ascending order.
*
*
* Example 1:
* Input: root1 = [2,1,4], root2 = [1,0,3]
* Output: [0,1,1,2,3,4]
*
* Example 2:
* Input: root1 = [0,-10,10], root2 = [5,1,7,0,2]
* Output: [-10,0,0,1,2,5,7,10]
*
* Example 3:
* Input: root1 = [], root2 = [5,1,7,0,2]
* Output: [0,1,2,5,7]
*
* Example 4:
* Input: root1 = [0,-10,10], root2 = []
* Output: [-10,0,10]
*
* Example 5:
* Input: root1 = [1,null,8], root2 = [8,1]
* Output: [1,1,8,8]
*
* Constraints:
* Each tree has at most 5000 nodes.
* Each node's value is between [-10^5, 10^5].
*
*/
const { assert } = require('../../util/js');
/**
* Definition for a binary tree node.
*/
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
/**
* @param {TreeNode} root1
* @param {TreeNode} root2
* @return {number[]}
*/
const getAllElements = function(root1, root2) {
const convertToList = (node, list) => {
if(!node) {
return;
}
convertToList(node.left, list);
list.push(node.val);
convertToList(node.right, list);
}
let listA = [];
let listB = [];
const result = [];
convertToList(root1, listA);
convertToList(root2, listB);
let i = 0;
let j = 0;
while(i < listA.length && j < listB.length) {
if (listA[i] < listB[j]) {
result.push(listA[i]);
i++;
} else {
result.push(listB[j]);
j++;
}
}
while(i < listA.length) {
result.push(listA[i]);
i++;
}
while(j < listB.length){
result.push(listB[j]);
j++;
}
return result;
};
/* Test Case 1
* Input: root1 = [2,1,4], root2 = [1,0,3]
* Output: [0,1,1,2,3,4]
*/
root1 = new TreeNode(2);
root1.left = new TreeNode(1);
root1.right = new TreeNode(4);
root2 = new TreeNode(1);
root2.left = new TreeNode(0);
root2.right = new TreeNode(3);
sol = [0,1,1,2,3,4];
assert(JSON.stringify(getAllElements(root1,root2)) === JSON.stringify(sol), 'Output: [0,1,1,2,3,4]');
/* Test Case 2
* Input: root1 = [0,-10,10], root2 = [5,1,7,0,2]
* Output: [-10,0,0,1,2,5,7,10]
*/
root1 = new TreeNode(0);
root1.left = new TreeNode(-10);
root1.right = new TreeNode(10);
root2 = new TreeNode(5);
root2.left = new TreeNode(1);
root2.right = new TreeNode(7);
root2.left.left = new TreeNode(0);
root2.left.right = new TreeNode(2);
sol = [-10,0,0,1,2,5,7,10];
assert(JSON.stringify(getAllElements(root1, root2)) === JSON.stringify(sol), 'Output: [-10,0,0,1,2,5,7,10]');
/* Test Case 3
* Input: root1 = [], root2 = [5,1,7,0,2]
* Output: [0,1,2,5,7]
*/
root1 = undefined;
root2 = new TreeNode(5);
root2.left = new TreeNode(1);
root2.right = new TreeNode(7);
root2.left.left = new TreeNode(0);
root2.left.right = new TreeNode(2);
sol = [0,1,2,5,7];
assert(JSON.stringify(getAllElements(root1,root2)) === JSON.stringify(sol), 'Output: [0,1,2,5,7]');
/* Test Case 4
* Input: root1 = [0,-10,10], root2 = []
* Output: [-10,0,10]
*/
root1 = new TreeNode(0);
root1.left = new TreeNode(-10);
root1.right = new TreeNode(10);
root2 = undefined;
sol = [-10,0,10];
assert(JSON.stringify(getAllElements(root1, root2)) === JSON.stringify(sol), 'Output: [-10,0,10]');