如何设计一个算法来确定两棵给定的二叉树T和T'是否具有相同的结构(即是否相似)?C语言
时间: 2024-11-05 13:31:28 浏览: 11
设计一个算法来检查两棵给定的二叉树T和T'是否具有相同的结构,可以使用递归的方法。以下是简单的步骤:
1. **函数声明**:首先定义两个函数,`isSameTree()` 和 `compareTrees()`, 前者用于比较当前节点,后者用于比较整个树。
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
bool isSameTree(TreeNode* root1, TreeNode* root2);
```
2. **递归基础**:如果两个节点都为空,那么它们的结构相同,返回`true`。
```c
if (!root1 && !root2) return true;
```
3. **递归比较**:如果两个节点的值不相等,说明它们的结构不相同,返回`false`。
```c
if (!root1 || !root2 || root1->val != root2->val) return false;
```
4. **递归遍历**:分别对左子树和右子树进行同样的比较。
```c
return compareTrees(root1->left, root2->left) && compareTrees(root1->right, root2->right);
```
5. **完整的`compareTrees()`函数**:
```c
bool compareTrees(TreeNode* root1, TreeNode* root2) {
if (isSameTree(root1, root2)) return true;
return false;
}
```
阅读全文