标签:index right TreeNode offer JZ26 子结构 return left
题目
思路
这道题目的关键在于使用双迭代结构
在当前节点进行判断,是否符合子结构
若符合:返回true
若不符合:对当前节点的左右子树分别再次进行判断,若存在符合,返回true,否则继续迭代
双迭代:1、判断是否符合子结构
2、遍历整个A树
对于判断是否是子结构:
if 当前根节点不等,直接返回false
else 当前根节点相等,判断左右子树
返回:left and right
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(!pRoot2||!pRoot1)//任何一个为空,则为false
return false;
else//当前均不空
{
if(son(pRoot1,pRoot2))//当前根节点即为子结构
return true;
if(HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2))//迭代左右子树
return true;
else
return false;
}
}
//判断当前节点有没有子结构
bool son(TreeNode * root,TreeNode*index)
{
bool left=true,right=true;
if(!root||root->val!=index->val)//当前节点不等
return false;
//对左右分别迭代
if(index->left)
left=son(root->left,index->left);
if(index->right)
right=son(root->right,index->right);
return left and right;
}
};
标签:index,right,TreeNode,offer,JZ26,子结构,return,left 来源: https://blog.csdn.net/qq_51052824/article/details/122684885
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。