题目如下:
解题过程如下:
若根结点为空,return false(为什么要写根结点为空的情况呢?递归中会对根结点进行解引用)
若这两棵二叉树相同——相同的树,return true
递归,若根结点的左子树中包含二叉树subRoot或根结点的右子树中包含二叉树subRoot,return true
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//都为空if (p == NULL && q == NULL){return true;}//其中一个为空if (p== NULL || q == NULL){return false;}//都不为空if (p->val != q->val){return false;}return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {if (root == NULL){return false;}if (isSameTree(root, subRoot)){return true;}return isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
}