子树
判断T2是否是T1的子树,分为以下几种情况:
1:T 2是空,结果必为真;
2:T1是空,结果必为假;(包括T1,T 2同为真)
3:T1,T2都不为空,判断T2的值是否等于T1的根节点的值:是→递归判断T1和T2的左右子树是否一样,直到T2结束。
否→判断T2是否和T1的左子树或者右子树一样,递归到结束。
bool isSubtree(TreeNode * T1, TreeNode * T2) {
// write your code here
bool result = false;
if (T2 == NULL) {return true;} //T2为空,不管T1有没有,都是真
if (T1 == NULL) {return false;} //T1位空,结果必为假
if (T1->val == T2->val) {result = dp(T1,T2);} //根节点相同
if (!result) {result = isSubtree(T1->left,T2);} //根节点不相同,判断T1的左子树的根节点是否与T2根节点相同
if (!result) {result = isSubtree(T1->right,T2);} //同上
return result;}
bool dp (TreeNode *T1, TreeNode *T2)
{
if (T1 != NULL && T2!=NULL && T1->val == T2->val)
{
return dp(T1->left,T2->left) && dp (T1->right,T2->right);
} //两树都不为空,递归
if (T1 == NULL && T2 == NULL) {return true;}//两树都是空
return false;
}
浙公网安备 33010602011771号