如何使用以下结构填充树
数据“A,B,C,D,E,F,G,H,I,J”所以在人口之后它的结构看起来像那样
我可以使用递归和函数轻松完成它,但我被告知我不能使用函数,只能循环。
这是我正在使用的结构
struct Tree
{
int value;
Tree* left;
Tree* right;
};
答案 0 :(得分:3)
这可以通过队列来完成。
对于输入中的每个元素:
在伪代码中:
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()
答案 1 :(得分:1)
这是关于构建完整的二叉树。我们可以使用数组来存储节点,关键是找到父节点。
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;
}