[路飞]_100. 相同的树

85 阅读1分钟

题目地址

题目描述

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:

输入: p = [1,2,3], q = [1,2,3]
输出: true

示例 2:

输入: p = [1,2], q = [1,null,2]
输出: false

示例 3:

输入: p = [1,2,1], q = [1,1,2]
输出: false

解题思路

有一句编程的至理名言是这样的

   要理解递归,首先要理解递归

代码1

var isSameTree = function(p, q){
    if(p == null && q == null) return true;
    let flag = true;
    var pre = function(p, q){
        if(p == null || q == null || p.val != q.val){
            flag = false;
            return false;
        }
        if(p.val || q.val){
            pre(p.left, q.left);
        }
        if(p.right || q.right){
            pre(p.right, q.right);
        }
    }
    pre(p, q);
    return true;
}

代码2

var isSameTree = function(p, q){
    // 递归判断的是当前值得特性,循环的是未来值,未来值特性和当前值一样
    if(p === null && q === null) return true;
    if(p === null || q === null) return false;
    // 当前的值相等,就去递归左节点,然后再去右节点
    return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}