题解 | #树的子结构#

树的子结构

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

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
//使用层次遍历的方法
//三个栈
//1.层次遍历主树
//2.判断是否与子树根节点相同
//3.如果相同,则用两个栈判断是否接下来也相同
//4.层次遍历子树,层次遍历主树中子树,一旦不相同,解除小循环
//(递归比栈循环遍历更快捷)
//使用递归的方法
//1.递归寻找相同的根节点
//1.3如果根节点为空,就返回 false(两个根都是)
//1.1如果相同,就递归比较,如果比较为true,就返回true
//1.2如果不同,就去左子树和右子树找

//2.递归比较树
//2.1如果子树为空,返回true
//2.2如果主树为空,返回false
//2.3如果两个节点相等,去左子树和右子树比较
//2.4如果不相等,返回false
#include <cstddef>
class Solution {
	bool IsEqualTree(TreeNode* pRoot1, TreeNode* pRoot2){
		bool result;
		if(pRoot2 == nullptr)
		{
			return true;
		}
		if(pRoot1 == nullptr)
		{
			return false;
		}
		if(pRoot1 -> val == pRoot2 -> val)
		{
			result = IsEqualTree(pRoot1->right, pRoot2->right)&&IsEqualTree(pRoot1->left, pRoot2->left);
			return result;
		}
		else 
		{
			return false;
		}
	}
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
		if(pRoot1 == nullptr or pRoot2 == nullptr)
		{
			return false;
		}
		if((pRoot1 -> val == pRoot2 -> val)&&(IsEqualTree(pRoot1,pRoot2)))
		{
			return true;
		}
		else 
		{
			return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
		}
		
    }
};

全部评论

相关推荐

机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务