如何填充非线性树
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;
【讨论】:
以上是关于如何填充非线性树的主要内容,如果未能解决你的问题,请参考以下文章
如何像在 Excel 中一样在 MySQL 中“填充系列”(线性步长值)?
如何给我的 SVG 图标冠上金色的线性渐变填充(路径)颜色? [复制]
数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树