如何在解析云代码中创建二叉树

时间:2016-03-17 06:48:15

标签: recursion parse-platform tree save cloud-code

我需要在解析云代码中创建锦标赛支架,但由于无法创建指向未保存对象的指针,因此无法执行此操作。

我应该如何使用此约束初始化像对象一样的树?由于保存功能是异步的,因此我无法保存每个括号。

保存括号功能

console.log('create bracket / end qualifier');
tournament.save('bracket', createBracket(tournament.get('players')),
{
    success: function(result)
    {
        console.log("saved!");
        callback(result);
    },
    error: function(result, error)
    {
        console.log("failed!");
        console.log(error.message);
        callback(result);
    }
});

创建括号功能

function createBracket(players)
{
    console.log("Creating bracket");
    var bracket = new Parse.Object("Match");
    bracket.set('matchId', 1);

    var extraLayerCount = getLayerCount(players);

    for (var i = 0; i < extraLayerCount; i++)
    {
        console.log("Adding layer " + i);
        addLayer(bracket);
    }

    return bracket;
}

添加图层功能

function addLayer(match)
{
    leftChild = match.get('leftChild');
    rightChild = match.get('rightChild');

    console.log("Checking if match has children");
    if (leftChild != null && rightChild != null)
    {
        console.log("Has children, telling children to add layers");
        addLayer(leftChild);
        addLayer(rightChild);
    }
    else
    {
        console.log("Creating new children");
        var leftChild = new Parse.Object("Match");
        leftChild.set('matchId', match.get('matchId') * 2);
        match.set('leftChild', leftChild);

        var rightChild = new Parse.Object("Match");
        rightChild.set('matchId', match.get('matchId') * 2 + 1);
        match.set('rightChild', rightChild);
    }
}

1 个答案:

答案 0 :(得分:0)

我的解决办法是自下而上创建它,而不是:

          1
    2           3
4       5   6       7

          7
    5           6
1       2   3       4

所以我在底层创建每个匹配,然后当它们完成保存时,为每对创建父项,保存它们,并继续这样做直到剩下1,我将返回作为树的第一个匹配:)