用c++程序以二叉链表作为二叉树的存储结构,编写以下算法: (1)交换二叉树每个结点的左孩子和右孩子。 (2)判别两棵树是否相等。
时间: 2024-10-26 21:16:39 浏览: 35
在C++中,我们可以使用二叉链表来表示二叉树,然后分别编写两个函数来完成这两个任务。
**(1)交换二叉树每个结点的左孩子和右孩子**
首先,我们需要定义二叉链表节点结构体,包含一个值、左右指针。接下来,遍历整个二叉树,对每个节点执行交换操作:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void swapChildren(TreeNode*& root) {
if (root) {
std::swap(root->left, root->right);
swapChildren(root->left);
swapChildren(root->right);
}
}
```
这个`swapChildren` 函数通过递归遍历树的每一个节点,将当前节点的`left` 和 `right` 指向的内容进行交换。
**(2)判别两棵树是否相等**
判断两棵二叉树是否相等,需要比较根节点的值是否相等以及它们的左右子树是否也相等:
```cpp
bool isSameTree(TreeNode* p, TreeNode* q) {
if (!p && !q) return true; // 都为空,认为相等
if (!p || !q) return false; // 有一个空,认为不等
return p->val == q->val &&
isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right);
}
```
这个`isSameTree` 函数采用递归的方式,如果两个节点都为空则返回true;若其中一个为空则返回false;如果节点值相等并且它们的子树也相等,则返回true。
阅读全文