相同的树
100. 相同的树 - 力扣(LeetCode)https://leetcode.cn/problems/same-tree/description/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL)
return true;
if (p == NULL || q == NULL)
return false;
if (p->val != q->val)
return false;
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
解释:
-
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
- 这是函数的声明行,定义了一个名为
isSameTree
的函数。它接收两个参数,分别是指向TreeNode
结构体的指针p
和q
,表示要比较的两棵树的根节点。函数返回一个布尔值bool
,如果两棵树相同则返回true
,否则返回false
。
- 这是函数的声明行,定义了一个名为
-
if (p == NULL && q == NULL)
- 这行代码检查两个节点
p
和q
是否都为空。如果都为空,说明两棵树在当前节点上是相同的(都是空树),因此返回true
。
- 这行代码检查两个节点
-
if (p == NULL || q == NULL)
- 这行代码检查两个节点
p
和q
中是否有一个为空而另一个不为空。如果存在这样的情况,说明两棵树至少在当前节点上就不同,因此返回false
。
- 这行代码检查两个节点
-
if (p->val != q->val)
- 这行代码检查两个节点
p
和q
的值是否不同。如果值不同,说明两棵树在当前节点上不相同,因此返回false
。
- 这行代码检查两个节点
-
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
- 如果当前节点
p
和q
都不为空且值相同,这行代码递归地调用isSameTree
函数,分别比较p
的左子节点和q
的左子节点,以及p
的右子节点和q
的右子节点。只有当左子树和右子树都相同,整个树才被认为是相同的,因此返回两个递归调用的结果的逻辑与(&&
)。
- 如果当前节点
总结来说,isSameTree
函数通过递归的方式比较两棵树的每个节点。首先检查当前节点是否为空,如果不为空再检查节点的值是否相同。如果所有对应的节点都相同,那么函数返回 true
,表示两棵树相同;如果任何一对对应节点不同,函数返回 false
,表示两棵树不同。