leetcode-day1- 合并二叉树[617题]
2020-10-10 本文已影响0人
孙静静
坚持一天一道leetcode, 这里将进行个记录~
image.pngleetcode上面默认传入的二叉树,返回的数组
但是我在实现的时候,加入了数组转完全二叉树,和最后的二叉树转成数组的过程。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
class TreeNode {
constructor(val) {
this.value = val;
this.left = null;
this.right = null;
}
}
/**
* 将数组转成完全二叉树
* 思路: 定义个队列queue,先放入根节点,循环数组,如果没有左节点则添加左节点,反之,有左节点则添加右节点,在右节点结束,去除队列的头部元素(因为完全二叉树是从左到右以此填充节点,符合队列
* 思想,这样当前节点指向队列的头部,这个头部元素一直是新的元素),左右节点添加完成后,判断数组是否有不为null的数,如果有,则继续添加队列,最后返回root(注意:这里一定要返回root)
*/
function arrToTree(arr) { // 将数组转成完全二叉树
let queue = [];
let curr_node = new TreeNode(arr[0]);
let root = null;
root = curr_node;
queue.push(root);
for(let i=1;i<arr.length;i++){
let item = arr[i];
curr_node = queue[0];
let new_node = new TreeNode(item);
if(curr_node.left === null){
curr_node.left = new_node;
} else {
curr_node.right = new_node;
queue.shift();
}
if(item !== null){
queue.push(new_node);
}
}
return root;
}
/**
* 将二叉树转成数组
* 思路: 定义一个队列,将二叉树放入队列中,判断队列是否为空,不为空,则取出队列中的树的value加入数组中,判断是否有左右子树,如果有,则添加队列,以此保证while循环能循环所有的节点
*/
function treeToArr(node){ // 将二叉树转成数组
if(node === null){
return null;
}
let arr = [];
let queue = [];
queue.push(node);
while(queue.length > 0){
let curr_node = queue.shift();
arr.push(curr_node.value);
if(curr_node.left) queue.push(curr_node.left);
if(curr_node.right) queue.push(curr_node.right);
}
return arr;
}
/**
* 617. 合并二叉树
* 题目链接: https://leetcode-cn.com/problems/merge-two-binary-trees/
* 传入的两个参数分别为两棵树,先判断树1和树2是否为空,都不为空,则两则相加
*/
function MergeTwoTree(z1, z2){ // leetcode要求实现的内容
if(z1 === null){
return z2;
}
if(z2 === null){
return z1;
}
z1.value += z2.value;
z1.left = MergeTwoTree(z1.left, z2.left);
z1.right = MergeTwoTree(z1.right, z2.right);
return z1;
}
let arr1 = [1,3,2,5];
let arr2 = [2,1,3,null,4,null,7];
console.log(MergeTwoTree(arrToTree(arr1), arrToTree(arr2)))
console.log(treeToArr(MergeTwoTree(arrToTree(arr1), arrToTree(arr2))))
</script>
</html>