Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++_Algorithm_Tree_Binary Tree - Fatal编程技术网

C++ 如何填充非线性树

C++ 如何填充非线性树,c++,algorithm,tree,binary-tree,C++,Algorithm,Tree,Binary Tree,如何使用以下结构填充树 数据是“A,B,C,D,E,F,G,H,I,J”,所以在人口之后,它的结构是这样的 我可以很容易地使用递归和函数,但有人告诉我,我不能使用函数,只能使用循环 这是我正在使用的struct struct Tree { int value; Tree* left; Tree* right; }; 这可以通过队列来完成 对于输入中的每个元素: 将其添加到队列中 然后将其添加到最后一个节点,或者作为左子节点,或者如果它已经有左子节点,则作为右子节点

如何使用以下结构填充树

数据是“A,B,C,D,E,F,G,H,I,J”,所以在人口之后,它的结构是这样的

我可以很容易地使用递归和函数,但有人告诉我,我不能使用函数,只能使用循环

这是我正在使用的struct

struct Tree
{
    int value;
    Tree* left;
    Tree* right;
};

这可以通过队列来完成

对于输入中的每个元素:

  • 将其添加到队列中
  • 然后将其添加到最后一个节点,或者作为左子节点,或者如果它已经有左子节点,则作为右子节点
  • 如果最后一个节点的两个子节点现在都已填充,则将最后一个节点作为队列中的出列项
在伪代码中:

list = A,B,C,D,E,F,G,H,I,J

last = list.removeFront()

while !list.empty
  node = list.removeFront()
  queue.enqueue(node)
  if last.left == NULL
    last.left = node
  else
    last.right = node
    last = queue.dequeue()

这可以通过队列来完成

对于输入中的每个元素:

  • 将其添加到队列中
  • 然后将其添加到最后一个节点,或者作为左子节点,或者如果它已经有左子节点,则作为右子节点
  • 如果最后一个节点的两个子节点现在都已填充,则将最后一个节点作为队列中的出列项
在伪代码中:

list = A,B,C,D,E,F,G,H,I,J

last = list.removeFront()

while !list.empty
  node = list.removeFront()
  queue.enqueue(node)
  if last.left == NULL
    last.left = node
  else
    last.right = node
    last = queue.dequeue()

这是关于建立一个完整的二叉树。我们可以使用数组来存储节点,关键是找到父节点

struct Tree
{
    int val;
    Tree *left, *right;
    Tree():val(0), left(NULL), right(NULL){}
};

Tree* buildCompleteBinaryTree(const vector<int>& values)
{
    size_t len = values.size();
    if(len <= 0) return NULL;

    Tree* trees = new Tree[len];
    trees[0].val = values[0];
    for(size_t i = 1; i < len; i++)
    {
        trees[i].val = values[i];
        size_t par = (i - 1) / 2;
        (i % 2)?(trees[par].left = &(trees[i])):(trees[par].right = &(trees[i]));
    }

    return trees;
}
结构树 { int-val; 树*左,*右; Tree():val(0)、left(NULL)、right(NULL){} }; 树*buildCompleteBinaryTree(常量向量和值) { size_t len=values.size();
if(len这是关于构建一个完整的二叉树。我们可以使用数组来存储节点,关键是找到父节点

struct Tree
{
    int val;
    Tree *left, *right;
    Tree():val(0), left(NULL), right(NULL){}
};

Tree* buildCompleteBinaryTree(const vector<int>& values)
{
    size_t len = values.size();
    if(len <= 0) return NULL;

    Tree* trees = new Tree[len];
    trees[0].val = values[0];
    for(size_t i = 1; i < len; i++)
    {
        trees[i].val = values[i];
        size_t par = (i - 1) / 2;
        (i % 2)?(trees[par].left = &(trees[i])):(trees[par].right = &(trees[i]));
    }

    return trees;
}
结构树 { int-val; 树*左,*右; Tree():val(0)、left(NULL)、right(NULL){} }; 树*buildCompleteBinaryTree(常量向量和值) { size_t len=values.size();
如果(len)你有树的类文件吗?如果你不给我们所有的信息,很难告诉你如何继续。我使用简单结构(c++)。添加到我的问题中。你有树的类文件吗?如果你不给我们所有的信息,很难告诉你如何继续。添加到我的问题中。