1.题目:
给你两棵二叉树 root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回 true
;否则,返回 false
。二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
2.原理:
这里调用前面比较两颗树是否相同的函数(小编之前文章里面有:相同的树),将节点与subRoot传入函数,向下递归,左右节点,只要找到一个返回true,说明存在子树,即最后返回true。
3.整体代码:
/*** 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(q->val!=p->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);
}