题目
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- leetcode链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
思路
- 找出所有疑似的根结点,再让每个节点的子树和B相比较,要注意各种边界的情况。
/**
* 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 || !B) return false
if (A.val === B.val) {
return checkSame(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B)
} else {
return isSubStructure(A.left, B) || isSubStructure(A.right, B)
}
}
function checkSame(node1, node2) {
if (!node2) {
return true
} else {
if (!node1) return false
if (node1.val !== node2.val) return false
return checkSame(node1.left, node2.left) && checkSame(node1.right, node2.right)
}
}