树如何知道何时停止在一侧添加元素?
我有代码,但无法掌握逻辑。我是编码新手,需要帮助。
class node {
public:
int data;
node* left;
node* right;
node(int d)
{
data = d;
left = NULL;
right = NULL;
}
};
node* buildtree()
{
int d;
cin >> d;
if (d == -1)
return NULL;
node* root = new node(d);
root->left = buildtree();
root->right = buildtree();
return root;
}
o / p一切正常,但是如何以及为什么?
答案 0 :(得分:0)
树如何知道何时停止在一侧添加元素?
感谢
if (d == -1) return NULL;
当您输入-1时,递归停止。
示例:
如果调用 buildtree()并输入-1,则返回一个空树(NULL指针)
如果调用 buildtree()并输入0,则先输入-1,然后再返回-1,然后返回-1,返回具有 data 0且无左/右的单个节点(它们是NULL指针)
如果调用 buildtree()并输入0,然后输入1,然后是-1,然后是-1然后是-1,然后是-1,这将返回具有 data 0的节点 data 为1的节点,没有左/右节点,返回节点没有右节点
等
答案 1 :(得分:0)
您应该将数据输入和树插入的概念分开。
Node * tree = nullptr;
void build_tree()
{
int number;
while (std::cin >> number)
{
insert(tree, number);
}
}
insert
函数将根据number
将值插入树中。
您的功能是遍历树并插入任何用户键入的内容;不维护树中节点的顺序。