关于如何镜像它的信息很多,但是那些假定可以修改node-> left和node-> right,例如此功能(不是我的,是从另一个网站复制的)。
void mirror(struct Node* node) {
if (node==NULL) return;
else {
struct Node* temp;
/* do the subtrees */
mirror(node->left);
mirror(node->right);
/* swap the pointers in this node */
temp = node->left;
node->left = node->right;
node->right = temp;
}
}
我知道必须有递归和基本情况(基本上是“做子树”部分),但是我不知道如何进行实际交换,因为Node是一类,左右子树是私有的(可以”)。
作为参考,这是类构造函数(没有默认构造函数)。如果它们很重要,我可以提供更多的功能(有访问器功能,但没有变异器)。它还使用模板,因此使用T。
Node(const T &x, Node *L = 0, Node *R = 0) : data(x), left(L), right(R) {}
我还做了另外两个函数(treeHeight和countNodes),不知道这是否有意义。而且我必须创建一棵新树来返回,而不是修改原始树。
注意- I 不想提供此答案,但想通知OP有关C ++语法的信息
您最初是为了实现此功能:
void mirror(struct Node* node) { if (node==NULL) return; else { struct Node* temp; /* do the subtrees */ mirror(node->left); mirror(node->right); /* swap the pointers in this node */ temp = node->left; node->left = node->right; node->right = temp; } }
在C++
中,将关键字struct
声明为function-parameter
或declaration
时,无需使用关键字variable
。仅在将declaration
写入struct
或class
本身时才需要它。您可以简单地做到这一点:
void mirror(Node* node) {
if (node==NULL) return;
else {
Node* temp;
/* do the subtrees */
mirror(node->left);
mirror(node->right);
/* swap the pointers in this node */
temp = node->left;
node->left = node->right;
node->right = temp;
}
}
答案 0 :(得分:1)
我建议您编写自己的交换成员函数:
void swapChildren(){
temp = node->left;
node->left = node->right;
node->right = temp;
}
这会交换左右元素。