leetcode 100.相同的树

涉及到递归,最好多画图理解,希望对你们有帮助

100.相同的树

题目

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

题目链接

力扣(LeetCode)官网 – 全球极客挚爱的技术成长平台

文字 和 画图 分析

  1. 思考递归进行的条件和结束的条件是什么
  2. 列举递归可能会出现的情况

针对上面两个问题进行解答:

要想找两个树的结构相同有点麻烦,换个思路,我们找它们不同

所以我们需要先对比两者的根节点,再去对比左子树和右子树

[很明显,我们采取的是 前序 遍历整个节点]

  • 在递归的时候,每一次根节点都发生变化,只要根节点对应的数值不同, 就返回 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);
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月13日
下一篇 2023年12月13日

相关推荐