树递归无限进行

时间:2020-09-03 07:22:45

标签: c++ recursion data-structures tree

我已经编写了一个从向量构造二叉树的代码。问题是,当我调用inOrder(root)时,它会进行无限递归,即root永远不会变成nullptr

#include <iostream>
#include <vector>
using namespace std;

class Node {
public:
    int data;
    Node* left;
    Node* right;
    explicit Node(int element) {
        data = element;
        left = nullptr;
        right= nullptr;
    }
};

Node* construct_tree(Node* root, vector<int> &vec, int i) {
    if(i < vec.size()) {
        Node* new_node = new Node(vec[i]);
        root = new_node;
        root->left = construct_tree(root, vec, 2*i + 1);
        root->right = construct_tree(root, vec, 2*i + 2);
    }
    return root;
}

void inOrder(Node* root) {
    if (root != nullptr) {
        inOrder(root->left);
        int n = root->data;
        cout << n << " ";
        inOrder(root->right);
    }
}

int main() {
    vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    Node *root = nullptr;
    root = construct_tree(root, vec, 0);
    cout << root->data << " ";
    cout << root->left->data;
    inOrder(root);
    return 0;
}

可能的解决方法吗?

1 个答案:

答案 0 :(得分:1)

您要从root返回construct_tree,因此当条件{{1}时,它可能将root分配给root->leftroot->right,从而创建了一个圆圈}是错误的。

在这种情况下,您不需要参数i < vec.size(),因为它的值从未在函数root中使用。

尝试一下:

construct_tree