leetcode 100.相同的树
2023-12-13 03:27:13
涉及到递归,最好多画图理解,希望对你们有帮助
100.相同的树
题目
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
题目链接
文字 和 画图 分析
- 思考递归进行的条件和结束的条件是什么
- 列举递归可能会出现的情况
针对上面两个问题进行解答:
要想找两个树的结构相同有点麻烦,换个思路,我们找它们不同
所以我们需要先对比两者的根节点,再去对比左子树和右子树
[很明显,我们采取的是 前序 遍历整个节点]
- 在递归的时候,每一次根节点都发生变化,只要根节点对应的数值不同, 就返回 false 结束递归 (其中一种结束条件)
- 根节点相同,我们无法判断是否两个树结构相同,只能继续递归(这是递归条件)
- 递归期间,我们还可能碰到以下情况:
如上图:我们遇到空树了
这里还需要分两种情况讨论:
如果两个树在这个节点都是空,则返回 true (这是其中一种结束条件)
[注意:我们是先对比根,再对比左子树,最后对比右子树,所以只有左子树和右子树都为 true 才是一样的树]
如果两个树只有一个为空,则返回 false (这是其中一种结束条件)
? 3. 判断的顺序问题
由于可能会遇到空树,先比较根的大小明显是不行的,所以应该把比较是否是空树的条件放前面
代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if ((p == NULL && q != NULL) || (p != NULL && q == NULL))
{
return false;
}
if (p == NULL && q == NULL)
{
return true;
}
if (p->val != q->val)
{
return false;
}
return isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right);
}
文章来源:https://blog.csdn.net/2301_79789645/article/details/134915492
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!