[路飞]_树的子结构

240 阅读1分钟

剑指 Offer 26. 树的子结构

题目

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:
给定的树 A:

示例1

A

           3
         /   \
        4     5
       / \       
      1   2B

           4
         /   
        1       

题解

递归

假如树B是树A的子结构,那一定有A === B ; 或者 A.left = B || A.right = B;

根据这个思路编辑代码如下:

代码

var isSubStructure = function(A, B) {
    if(A === null || B === null) return false;
    return helper(A,B) || isSubStructure(A.left,B) || isSubStructure(A.right,B)
    function helper(root,node){
        if(node === null) return true;
        if(root === null) return false;
        if(node.val !== root.val) return false;
        return helper(root.left,node.left) && helper(root.right,node.right)
    }
};