我已经编写了一个从向量构造二叉树的代码。问题是,当我调用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;
}
可能的解决方法吗?
答案 0 :(得分:1)
您要从root
返回construct_tree
,因此当条件{{1}时,它可能将root
分配给root->left
或root->right
,从而创建了一个圆圈}是错误的。
在这种情况下,您不需要参数i < vec.size()
,因为它的值从未在函数root
中使用。
尝试一下:
construct_tree