617.合并二叉树、700.二叉搜索树中的搜索

71 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

617.合并二叉树

题目分析

题目要求将给出的两颗二叉树合成一颗新的二叉树,如果二叉树的两个节点重叠,那么将两个节点的值相加作为合并后新节点的值,如果不是重叠的节点,直接作为新二叉树的节点。

解题

首先来考虑递归的三要素:

  1. 参数和返回值

参数为两颗二叉树,返回值为新的二叉树。

  1. 终止条件

当一颗二叉树为空时,返回另一颗二叉树。

  1. 单层循环的逻辑

单层循环的逻辑就是将两棵二叉树的节点相加,作为新二叉树的节点值。

这道题非常简单,只要遵循三要素即可解出。

代码如下:

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.二叉搜索树中的搜索

题目分析

题目给出二叉搜索树和整数值,要求在二叉搜索树中找出节点值等于整数值的节点,并返回以该节点为根的子树。

解题

首先来考虑递归的三要素:

  1. 参数和返回值

参数为根节点和要寻找的值。

  1. 终止条件

当没有节点或者根节点的值等于要找的值时,返回当前的节点。

  1. 单层循环的逻辑

由于二叉搜索树的特性,当节点的值大于搜索值时,只需要搜索节点的左子树。当节点的值小于搜索值时,只需要搜索节点的右子树。

代码如下:

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)
};

总结

这两道题都十分简单,不过对于我们理解二叉树的解法有很大帮助。