开o2o网站需要什么手续,企业cms免费,做那个免费观看视频网站,网站如何做后台留言目录
1.题目
代码模板
2.分析
3.代码
4.提交结果 1.题目
https://leetcode.cn/problems/subtree-of-another-tree/description/ 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在#xff0c;返回 true #xff…目录
1.题目
代码模板
2.分析
3.代码
4.提交结果 1.题目
https://leetcode.cn/problems/subtree-of-another-tree/description/ 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在返回 true 否则返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。 示例 1 输入root [3,4,5,1,2], subRoot [4,1,2]
输出true示例 2 输入root [3,4,5,1,2,null,null,null,null,0], subRoot [4,1,2]
输出false提示 root 树上的节点数量范围是 [1, 2000]subRoot 树上的节点数量范围是 [1, 1000]-10^4 root.val 10^4-10^4 subRoot.val 10^4 代码模板
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
}
2.分析
题目的意思是在整棵二叉树中寻找特定的子树(局部相等)
检查是否包含subroot,即寻找相同的子树,因此可以直接调用L15.【LeetCode笔记】相同的树文章的代码,如下
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if (pNULL qNULL)return true;//若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULLif ((pNULL)(qNULL)1)return false;//只剩下最后一种情况:p和q都不为NULLif (p-val!q-val)return false;//执行到此处,说明p-val和q-val相等return isSameTree(p-left, q-left) isSameTree(p-right, q-right);
}
现在的问题转化为如何设计isSubtree函数使其能合理调用isSameTree函数 由于subRoot肯定不为空树,因此上来先判断rootNULL if(rootNULL)return false;
除去了这种情况,剩下root!NULL,把每个节点视作根去寻找子树,判断子树是否相等
可以判断isSameTree(root,sunRoot)的返回值,再进一步操作 if (isSameTree(root,subRoot))return true;
如果上方函数的返回值为false,情况有两种:1.完全找不到符合subRoot的子树 2.不是要找的子树,需要进一步查找(root-left和root-right)
注意:只要左右子树有一个符合要求就可以,因此用或(||)连接
return isSubtree(root-left,subRoot) || isSubtree(root-right,subRoot);
递归展开图(只画isSameTree),以下面这个二叉树为例说明 注:CSDN会压缩图片画质,无损bmp图片链接(大小 9.28M)见百度网盘 请输入提取码
3.代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if (pNULL qNULL)return true;//若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULLif ((pNULL)(qNULL)1)return false;//只剩下最后一种情况:p和q都不为NULLif (p-val!q-val)return false;//执行到此处,说明p-val和q-val相等return isSameTree(p-left, q-left) isSameTree(p-right, q-right);
}bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{if (rootNULL)return false;if (isSameTree(root,subRoot))return true;return isSubtree(root-left,subRoot) || isSubtree(root-right,subRoot);}
4.提交结果