gpt4 book ai didi

C++:复制具有加倍节点的二叉树

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:41 25 4
gpt4 key购买 nike

目标是创建一棵树的拷贝,其中每个节点的值都是原始节点值的两倍。该函数应该递归地实现。我写了一些创建新树的代码,但错误是我的代码从未创建“完整拷贝”,它总是只有前两个级别。

Node* doubleUp(Node* root) {
int value = root->data;
Node* newroot = new Node(value*2);

if(root->left != NULL)
{
int value = (root->left)->data;
Node* left = new Node(value*2);
newroot->left = left;
doubleUp(newroot->left);
}
if(root->right != NULL)
{
int value = (root->right)->data;
Node* right = new Node(value*2);
newroot->right = right;
doubleUp(newroot->right);
}
return newroot;
}

我明白为什么要这样做,该函数总是创建一个“newroot”,而不是在第一级之后它应该只接受传递给它的参数。但不确定如何修复它。

这是一个示例树,使用了 Node 结构。

Node a(0), b(4), c(2), d(1), e(5), f(6), g(3), h(7);
a.left=&b;
a.right=&c;
c.left=&f;
b.left=&d;
b.right=&e;
d.left=&g;
d.right=&h;

最佳答案

你没有对左右子树的 doubleUp 的返回值做任何事情,所以你的递归是错误的。(你的调用实际上是在泄漏内存!)你真正想做的是这样的:

Node* doubleUp(Node* root) {
Node* doubledRoot = new Node(root->data * 2);
if (root->left) {
newRoot->left = doubleUp(root->left);
}
if (root->left) {
newRoot->right = doubleUp(root->right);
}
return doubledRoot;
}

请记住,我还没有实际测试过这段代码,因此它可能会出现轻微问题,但应该传达了基本思想。

关于C++:复制具有加倍节点的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com