相同的树//一棵树是否是另一颗树的子树

两个树是不是相同的树

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
	//其中一个为空
	//都为空
	//都不为空
	if (p && !q){
		return false;
	}
	if (!p && q){
		return false;
	}
	if (!p && !q){
		return true;
	}
	if (p->val == q->val){
		return isSameTree(p->left, q->left) &&
			isSameTree(p->right, q->right);
	}
	else{
		return false;
	}
}

一棵树是不是另一颗树的子树

bool IsSameTree(struct TreeNode* p, struct TreeNode* q){
	if (!p && q){
		return false;
	}
	if (!q && p){
		return false;
	}
	if (!q && !p){
		return true;
	}
	if (p->val == q->val){
		return IsSameTree(q->left, p->left) && IsSameTree(q->right, p->right);
	}
	else{
		return false;
	}
}
bool isSubtree(struct TreeNode* s, struct TreeNode* t){
	if (s == NULL){
		return false;
	}
	//与根比较, 根相同, 且是同一结构, 返回 true
	if (s->val == t->val && IsSameTree(s, t)){
		return true;
	}
	// 与左右子树比较
	return isSubtree(s->left, t) || isSubtree(s->right, t);
}
发布了60 篇原创文章 · 获赞 5 · 访问量 2635

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/102470722