持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
617.合并二叉树
题目分析
题目要求将给出的两颗二叉树合成一颗新的二叉树,如果二叉树的两个节点重叠,那么将两个节点的值相加作为合并后新节点的值,如果不是重叠的节点,直接作为新二叉树的节点。
解题
首先来考虑递归的三要素:
- 参数和返回值
参数为两颗二叉树,返回值为新的二叉树。
- 终止条件
当一颗二叉树为空时,返回另一颗二叉树。
- 单层循环的逻辑
单层循环的逻辑就是将两棵二叉树的节点相加,作为新二叉树的节点值。
这道题非常简单,只要遵循三要素即可解出。
代码如下:
var mergeTrees = function (root1, root2) {
const preOrder = (root1, root2) => {
if (!root1) return root2
if (!root2) return root1;
root1.val += root2.val;
root1.left = preOrder(root1.left, root2.left);
root1.right = preOrder(root1.right, root2.right);
return root1;
}
return preOrder(root1, root2);
};
700.二叉搜索树中的搜索
题目分析
题目给出二叉搜索树和整数值,要求在二叉搜索树中找出节点值等于整数值的节点,并返回以该节点为根的子树。
解题
首先来考虑递归的三要素:
- 参数和返回值
参数为根节点和要寻找的值。
- 终止条件
当没有节点或者根节点的值等于要找的值时,返回当前的节点。
- 单层循环的逻辑
由于二叉搜索树的特性,当节点的值大于搜索值时,只需要搜索节点的左子树。当节点的值小于搜索值时,只需要搜索节点的右子树。
代码如下:
var searchBST = function(root, val) {
if(!root || root.val === val) return root
if(root.val > val) return searchBST(root.left,val)
if(root.val < val) return searchBST(root.right,val)
};
总结
这两道题都十分简单,不过对于我们理解二叉树的解法有很大帮助。