剑指 Offer 26. 树的子结构


题目链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/

本文采用JavaScript进行解题:一、递归

一、递归

观赏点:1、将需要额外递归的部分划分为独立的函数;2、递归函数的返回值

 1 /**
 2  * @param {TreeNode} A
 3  * @param {TreeNode} B
 4  * @return {boolean}
 5  * A为null时,返回false;
 6  * B为null时,返回false;(空树不是任意一个树的子结构)
 7  * 遍历A树的结点,以当前结点为根的子树使之与B树做对比;
 8  * 一次成功即返回true,否则继续遍历A树,直至遍历完叶子结点。
 9  * 
10  * 两树的比较函数compare:
11  *  递归深度遍历A、B两树结点,
12  *  B树被遍历完,返回true,
13  *  当前结点值若不等,返回false
14  *  左子结点、右子结点均相等时,返回true
15  */
16 var isSubStructure = function (A, B) {
17   if (A == null || B == null) return false;
18   return compare(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
19 };
20 let compare = function(A, B) {
21   if(B == null) return true;
22   if(A == null || A.val != B.val) return false;
23   return compare(A.left, B.left) && compare(A.right, B.right);
24 }