如何解决树递归无限进行
我已经编写了一个从向量构造二叉树的代码。问题是,当我调用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,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,0);
cout << root->data << " ";
cout << root->left->data;
inOrder(root);
return 0;
}
可能的解决方法吗?
解决方法
您要从root
返回construct_tree
,因此当条件{{1}时,它可能将root
分配给root->left
或root->right
,从而创建了一个圆圈}是错误的。
在这种情况下,您不需要参数i < vec.size()
,因为它的值从未在函数root
中使用。
尝试一下:
construct_tree
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。