如何使用以下结构填充树

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

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

这是我正在使用的结构

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

最佳答案

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

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;
}

关于c++ - 如何填充非线性树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20005881/

10-09 02:46