首页 > 解决方案 > 使用递归创建二叉树时出现堆栈溢出错误

问题描述

我被要求使用递归创建一棵二叉树。每个节点有 80% 的概率有一个左儿子和 90% 的概率有一个右儿子。我也使用随机数据键。我在这种递归方面遇到了麻烦,而且调试起来也很困难。知道可能是什么问题吗?

void BinaryTree::createTree()
{
    if (!this->m_root)
    {
        srand((unsigned)time(NULL));
        this->m_root = new Node(rand() % (200) + 1);
        addRandomNodes(this->m_root);
    }

}

void BinaryTree::addRandomNodes(Node* n)
{
    if (!n)
        return;

    srand((unsigned)time(NULL));
    int xL = rand() % (80) + 1;
    int yR = rand() % (90) + 1;

    //set Left-Son Recursively
    if (xL > 10) {
        Node* newLeft = new Node(rand() % (200) + 1);
        n->setLeft(newLeft);
        addRandomNodes(newLeft);
    }

    //set Right-Son Recursively
    if (yR > 10) {
        Node* newRight = new Node(rand() % (200) + 1);
        n->setRight(newRight);
        addRandomNodes(newRight);
    }

    return;

}


Node::Node() : m_left(nullptr), m_right(nullptr), m_data(0){}

Node::Node(int data) : m_left(nullptr), m_right(nullptr)
{
    this->m_data = data;
}

标签: c++recursionbinary-treeb-tree

解决方案


推荐阅读