记录算法学习,输出更有利于学习!
1305. 两棵二叉搜索树中的所有元素
例子 :
思路:
由于是 二叉搜索树, 依据特性,可以使用中序遍历,得到一个升序数组,使用ES6 可以直接排序(这边就可以使用其他的遍历,反正到时候要合并排序 )。非 ES6,
循环两个数组 ,定义锚点记录两个数组的状态,然后对比大小。把小的放进去, 当一个数组 放满后,循环未满的数组依次放入即可
完整代码
ES6
var getAllElements = function(root1, root2) {
let res = []
function getNodeList (root, arr) {
if (!root) return arr;
getNodeList(root.left, arr);
arr.push(root.val);
getNodeList(root.right, arr);
return arr;
}
return res.concat(getNodeList(root1, []), getNodeList(root2, [])).sort((a, b) => {
return a-b
})
};
非 ES6:
var getAllElements = function(root1, root2) {
let res = []
function getNodeList (root, arr) {
if (!root) return arr;
getNodeList(root.left, arr);
arr.push(root.val);
getNodeList(root.right, arr);
return arr;
}
const nums1 = getNodeList(root1, [])
const nums2 = getNodeList(root2, [])
let p1 = 0
let p2 = 0
while(true) {
if(p1 === nums1.length) {
for(let i = p2; i < nums2.length; i++) {
res.push(nums2[i])
}
// 结束循环
break
}
if (p2 === nums2.length) {
for (let i = p1; i < nums1.length;i++) {
res.push(nums1[i]);
}
break;
}
// 对比大小
if (nums1[p1] < nums2[p2]) {
res.push(nums1[p1++]);
} else {
res.push(nums2[p2++]);
}
}
return res;
};