要判断两棵裸二叉树是否完全相同(即树中每个结点位置相同,值相同),可以使用递归算法来实现。
算法思路如下:
- 如果两棵树都为空,则它们是完全相同的,返回 true。
- 如果其中一棵树为空,另一棵不为空,或者它们根节点的值不相同,那么它们不是完全相同的,返回 false。
- 递归地判断两棵树的左子树和右子树是否完全相同。
以下是使用 C 语言实现的示例代码:
#include <stdbool.h>
// 定义二叉树结点结构
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 || p->val != q->val) {
return false;
}
// 递归地判断两棵树的左子树和右子树是否完全相同
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
在这段代码中,isSameTree 函数接收两棵裸二叉树的根节点指针 p 和 q,并使用递归方式判断它们是否完全相同。