给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
示例 1:
输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true
示例 2:
输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*//*** @param {TreeNode} root* @param {TreeNode} subRoot* @return {boolean}*/var isSubtree = function (root, subRoot) {// 二叉树的递归分为「遍历」和「分解问题」两种思维模式,这道题需要用到「遍历」的思维。if (root === null) { return subRoot === null };// 判断以root为根的二叉树是否和subRoot 相同const isSameTree = (p, q) => {if (!p && !q) return true;if (p && q &&p.val === q.val &&isSameTree(p.left, q.left) &&isSameTree(p.right, q.right)) {return true} else {return false}}if(isSameTree(root, subRoot)) {return true}// 去子树中判断是否有相同树return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot)};

