剑指offer-17:树的子结构
树的子结构
https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
1:判断是否为子结构,我的想法是要构造一个比较函数,比较当前传入的两个树.
2:比较函数:比较传入的树是否为空、比较传入的节点值是否相等,然后递归迭代子节点.
3:由于比较函数只比较当前传入的两个子树是否相等,所以在主函数中也要进行递归.
4:主函数中需要设置停止递归的条件:两个子树有一个为空就停止输出false.
5:需要给每一个子树都调用一次并且进行或运算,所以调用compare函数,并且递归调用主函数的左右子树.
//比较函数 function compare(p1,p2){ if(!p2) return true if(!p1) return false if(p1.val !== p2.val) return false return compare(p1.left,p2.left) && compare(p1.right,p2.right) } //主函数 function HasSubtree(pRoot1, pRoot2) { // write code here if(!pRoot1 || !pRoot2) return false return compare(pRoot1, pRoot2) || HasSubtree(pRoot1.left, pRoot2) || HasSubtree(pRoot1.right, pRoot2) }