这题严格来说并不算一个简单题,但是想明白后却觉得好像又是一个简单题,这题对于递归的考研是相当到位的,和100题相同的子树很像,但是却又增加了条件,另一颗树是另一颗树的子树。
下面贴出代码:
bool campare(struct TreeNode* root, struct TreeNode* subRoot)
{
// 如果两个节点为空的话则为true
if (!root && !subRoot)
return true;
if (!root || !subRoot)
return false;
if (root->val != subRoot->val)
return false;
return campare(root->left, subRoot->left) && campare(root->right, subRoot->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if (root == NULL)
{
return false;
}
// 这一段代码很有意思,前面进入函数递归
// 后面两个 isSubtree 传入左子树,再次进入campare函数递归
// 只要有一个为true, 则为true;
return campare(root, subRoot) || isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
}
版权声明:本文为qq_48718265原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。