剑指offer_树的子结构

71 阅读1分钟

题目描述

输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。

我们规定空树不是任何树的子结构。

样例: A

     8
    / \
   8   7
  / \
 9   2
    / \
   4   7

B

  8
 / \
9   2

返回 true,因为 B 是 A 的子结构。

Code

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} pRoot1
 * @param {TreeNode} pRoot2
 * @return {boolean}
 */
var hasSubtree = function(pRoot1, pRoot2) {
    
    function isPart (p1, p2) {
        if (!p2) return true;
        if (!p1 || p1.val != p2.val) return false;
        return isPart(p1.left,p2.left) && isPart(p1.right,p2.right);
        
    }
    
    if (!pRoot1 || !pRoot2) return false;
    if (isPart(pRoot1, pRoot2)) return true;
    return hasSubtree(pRoot1.left, pRoot2) || hasSubtree(pRoot1.right, pRoot2);
    
};