题解 | #树的子结构#

树的子结构

https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88


class Solution {
public:

	bool panduan(TreeNode* p1,TreeNode* p2){
		if(p1 == NULL && p2 != NULL) return false;  //主树先空不对
		if(p1 == NULL || p2 == NULL) return true;   //主树空或不空无所谓,只要子树该节点空了,就ok
		if(p1->val != p2->val) return false;  //两个都不空 值不一样返回false
		else return panduan(p1->left,p2->left) && panduan(p1->right,p2->right);  //值一样两个都往下判断,直到p2为空为止
	}

    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
		if(pRoot1 == NULL || pRoot2 == NULL) return false; //只要有一个是空的,本次判断无需执行
		bool flag1 = panduan(pRoot1,pRoot2);  //去判断当前的两个节点
		bool flag2 = HasSubtree(pRoot1->left,pRoot2);  //如果flag1不成立,就去判断主树的左和右
		bool flag3 = HasSubtree(pRoot1->right,pRoot2);//相当于遍历了主树的每个节点,只要有一个情况的panduan是true,那结果就是true
		return flag1 || flag2 || flag3;
    }
};
//根据对称的二叉树那个题和结合本题答案来写的
//最初时候想的用递归去判断这个flag2和flag3的逻辑发现无法实现

全部评论

相关推荐

感谢信收割机Rain:他昨天还和我打瓦,今天咋这样发邮件😅
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务