【剑指offer】树的子结构

    xiaoxiao2024-12-22  4

    题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    思路: 1.首先查找A中是否有与B的根节点一样的值 2.若没有,则判断结束,B不是A的子树 3.若有,则判断根节点的左右节点的值是否相同,若不同,则不是, 若相同,则判断左节点的左右节点是否相同,若相同,则判断右节点的左右节点是否相同 4.递归至达到A或B的叶子节点结束

    实现: 这位大佬的逻辑短路用得很溜,所以借鉴一下下~

    链接:https://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88 来源:牛客网 class Solution { bool isSubtree(TreeNode* pRootA, TreeNode* pRootB) { if (pRootB == NULL) return true; if (pRootA == NULL) return false; if (pRootB->val == pRootA->val) { //先找A中有没有与B根节点一样的值,有再比较左右子树是否相同 return isSubtree(pRootA->left, pRootB->left)&& isSubtree(pRootA->right, pRootB->right); } else return false; //没有则说明B不是A的子树 } public: bool HasSubtree(TreeNode* pRootA, TreeNode* pRootB) { if (pRootA == NULL || pRootB == NULL) //递归的终止条件是达到了A或者B的叶节点 return false; return isSubtree(pRootA, pRootB) ||HasSubtree(pRootA->left, pRootB) || HasSubtree(pRootA->right, pRootB); //借助逻辑短路 } };
    最新回复(0)