我想在二叉树中将每个节点乘以负值-2。但是我不知道如何实现它。当与负数相乘时,左右子树将更改其位置。我被困在这样做。
typedef struct BTree {
int value;
struct BTree *left, *right;
} BTree;
BTree *insert(BTree *root, int value) {
if (root == NULL) {
BTree *new_node = (BTree*) malloc(sizeof(BTree));
new_node->value = value;
new_node->left = new_node->right = NULL;
return new_node;
}
if (value < root->value) {
root->left = insert(root->left, value);
}
else if (value > root->value) {
root->right = insert(root->right, value);
}
else {
}
return root;
}
void print_tree(BTree *root)
{
if (root == NULL) return;
print_tree(root->left);
printf("%d ", root->value);
print_tree(root->right);
}
void swap_tree(BTree *root)
{
if (root == NULL)
return;
else
{
BTree *temp;
swap_tree(root->left);
swap_tree(root->right);
temp = root->left;
root->left = root->right;
root->right = temp;
}
}
答案 0 :(得分:1)
从您的问题看来,您似乎在谈论二进制搜索树,而不仅仅是二进制树。正如您正确指出的那样,将二进制搜索树的节点中的所有值相乘会导致更改每个节点上子树的顺序。实现的方式将取决于您使用的树表示形式,但是对于大多数情况,基于递归的方法应该可行,该方法从叶子开始在每个节点处交换两个子节点。