Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二叉树-数据结构_C++ - Fatal编程技术网

C++ 二叉树-数据结构

C++ 二叉树-数据结构,c++,C++,树如何知道何时停止在一侧添加元素 我有代码,但无法掌握逻辑。我不熟悉编码,需要帮助 class node { public: int data; node* left; node* right; node(int d) { data = d; left = NULL; right = NULL; } }; node* buildtree() { int d; cin >>

树如何知道何时停止在一侧添加元素

我有代码,但无法掌握逻辑。我不熟悉编码,需要帮助

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和一切正常,但如何以及为什么

树如何知道何时停止在一侧添加元素

多亏了

当您输入-1时,递归停止

示例:

  • 如果调用buildtree()并输入-1,则返回空树(空指针)

  • 如果调用buildtree()并输入0,然后输入-1,然后输入-1,返回一个节点,其中包含数据0,但没有左/右(它们是空指针)

  • 如果调用buildtree()并输入0,然后输入1,然后输入-1,然后输入-1,然后输入-1,返回包含数据0的节点,该节点有一个包含数据1的左节点,该节点没有左/右节点,返回节点没有右节点


您应该将数据输入和树插入的概念分开

Node * tree = nullptr;
void build_tree()
{
   int number;
   while (std::cin >> number)
   {
       insert(tree, number);
   }
}
insert
函数将根据
number
将值插入到树中


您的函数是遍历树并插入用户键入的任何内容;不维护树中节点的顺序。

请阅读有关数据结构的书籍。键入“-1”时“取决于树结构。在某些树上,当新节点小于当前树节点时,会将其插入到左子树上,否则会将其放置在右子树上。二叉树可以在左子树上插入新值(如果较大)。
Node * tree = nullptr;
void build_tree()
{
   int number;
   while (std::cin >> number)
   {
       insert(tree, number);
   }
}