1. 剑指 Offer 26. 树的子结构
解题思路
源代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} A
* @param {TreeNode} B
* @return {boolean}
*/
var isSubStructure = function(A, B) {
if(A == null || B == null)
return false
//先从根节点判断B是不是A的子结构,如果不是在分别从左右两个子树判断,
//只要有一个为true,就说明B是A的子结构
return recur(A,B) || isSubStructure(A.left,B) || isSubStructure(A.right,B)
};
var recur = function(A,B){
//这里如果B为空,说明B已经访问完了,确定是A的子结构
if(B == null)
return true;
//如果B不为空A为空,或者这两个节点值不同,说明B树不是
//A的子结构,直接返回false
if(A == null || A.val != B.val)
return false;
//当前节点比较完之后还要继续判断左右子节点
return recur(A.left,B.left) && recur(A.right, B.right)
};