二叉树数据结构

时间:2019-06-27 12:25:24

标签: c++

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

我有代码,但无法掌握逻辑。我是编码新手,需要帮助。

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

2 个答案:

答案 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将值插入树中。

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