gpt4 book ai didi

C++ 递归函数中的平衡树/调用顺序

转载 作者:行者123 更新时间:2023-11-28 02:13:55 26 4
gpt4 key购买 nike

我目前正在编写 CART 树的实现,它是机器学习中使用的二叉树。它按照以下代码进行递归训练:

struct Node
{
Node * parent;
Node * left;
Node * right;
};

void train(Node* node)
{
//perform training algorithm on node

train(node->left);
train(node->right);
}

现在假设我将训练迭代次数限制为选定的值,比如 nTraining=4

然后,通过展开递归函数调用,我希望只有 left 分支得到进化。所以前四个调用是:

    train(node);
train(node->left);
train(node->left->left);
train(node->left->left->left);
//only now train(node->left->left->right); would follow

这给出了一个完全不平衡的树,看起来像

          O
/ \
O O
/ \
O O
/ \
O O
/ \
O O

任何人都可以建议我可以进一步使用递归训练方法并仍然获得平衡树的方法吗?

最佳答案

我会说,不要使用递归 (DFS)。使用 BFS,即队列代替,所以树是逐层遍历的:

std::queue<Node*> q;
Node* root;
q.push(root);
for (int i = 0; i < nTraining; ++i) {
Node* node = q.front();
q.pop();
train(node);
q.push(node->left);
q.push(node->right);
}

关于C++ 递归函数中的平衡树/调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687515/

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