题解 | #树的子结构#
树的子结构
http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88
class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { // 空树不是任意一个数的子结构 // 递归终止条件:1.当pRoot2 为空节点直接返回false. 2.当pRoot1递归到空节点时返回false; if(!pRoot1 || !pRoot2) return false; // 两重递归; return dfs(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); } bool dfs(TreeNode* p, TreeNode* q){ // 当q节点为空时,p节点可以不为空,这求的是子结构而不是子树; if(!q) return true; if(!p || p->val != q->val) return false; return dfs(p->left, q->left) && dfs(p->right, q->right); } };