如何填充非线性树

Posted

技术标签:

【中文标题】如何填充非线性树【英文标题】:How to populate Non Linear Tree 【发布时间】:2013-11-15 16:31:45 【问题描述】:

如何使用以下结构填充树

使用数据“A、B、C、D、E、F、G、H、I、J”,所以在填充后它的结构看起来像这样

我可以使用递归和函数轻松做到这一点,但有人告诉我我不能使用函数,只能使用循环。

这是我正在使用的结构

struct Tree

    int value;
    Tree* left;
    Tree* right;
;

【问题讨论】:

你有树的类文件吗?当您不向我们提供所有信息时,很难告诉您如何进行 我使用简单的结构(c++)。添加到我的问题中。 【参考方案1】:

这可以通过队列来完成。

对于输入中的每个元素:

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

在伪代码中:

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()

【讨论】:

【参考方案2】:

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

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;

【讨论】:

以上是关于如何填充非线性树的主要内容,如果未能解决你的问题,请参考以下文章

如何给SVG填充和描边应用线性渐变

如何像在 Excel 中一样在 MySQL 中“填充系列”(线性步长值)?

如何给我的 SVG 图标冠上金色的线性渐变填充(路径)颜色? [复制]

数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树

技巧 Pandas 数据填充

模型树——就是回归树的分段常数预测修改为线性回归 对于非线性回归有较好的预测效果