在JavaScript中搜索二叉树

时间:2014-06-17 11:12:54

标签: javascript json

我在JavaScript中有点迷失。我有这个结构:

{
    "value": 5,
    "children": [{
        "value": 18,
        "children": [{
            "value": 27,
            "children": []
        }, {
            "value": 4,
            "children": []
        }]
    }, {
        "value": 2,
        "children": []
    }]
}

如何使用JavaScript在树中获得最高价值?

4 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您可能想要使用此功能:

var baseObject = {
    "value": 5,
    "children": [{
        "value": 18,
        "children": [{
            "value": 27,
            "children": []
        }, {
            "value": 4,
            "children": []
        }]
    }, {
        "value": 2,
        "children": []
    }]
};

function getHighestValue(obj) {
    var res = obj.value;
    for(var i in obj.children) {
        res = Math.max(res, getHighestValue(obj.children[i]));
    }
    return res;
}

alert(getHighestValue(baseObject));

http://jsfiddle.net/qc9R4/1/

答案 1 :(得分:0)

如果理解你的正确应该看起来像这样。

var highestValue = JSONresponse.value;

HighVal(JSONresponse);

function HighVal(JSON) 
{ 
   if(highestValue < JSON.value)
   {
     highestValue = JSON.value
   }
   for(i=0;i<JSON.children.lenght;i++)
   {
     HighVal(JSON.children[i]);
   }
 }

答案 2 :(得分:0)

另一种方法是,如果您的对象树模式相同,

Stringify对象并执行正则表达式以获取此模式“value:{n}”的所有整数值,然后找到最大值。

  var jsono = {
        "value": 5,
        "children": [{
            "value": 18,
            "children": [{
                "value": 27,
                "children": []
            }, {
                "value": 4,
                "children": []
            }]
        }, {
            "value": 2,
            "children": []
        }]
    }
    var maxvalue;
    JSON.stringify(jsono).match(/\"value\":\s*(\d+)/g).map(function(value){ return value.match(/(\d+)/g).map(function(value){ maxvalue =  Math.max(maxvalue || 0,value);});});
    alert(maxvalue);

http://jsfiddle.net/6R9p3/1/

答案 3 :(得分:-1)

我不会为你编写代码,但基本上,它与其他语言一样。

您遍历每个正确的孩子,直到您知道它是结束节点。

如何使用JavaScript访问JSON?

var tree = 
{
  parent : [
    {
      //child1 details
    },
    {
      //child2 details
    },
  ]
}

对于JSON密钥访问,请使用tree.<key> (dot)tree['key']。在这种情况下,tree.parenttree["parent"]

对于阵列访问,请使用索引。由于parent是一个数组,因此您可以tree.parent[0]tree['parent'][0]访问子项。

我更喜欢dot方法,以区分视觉上的JSON和数组。

,您需要一些东西来区分正确的孩子和左孩子。您可以将其作为约定,将正确的子项作为数组中的[0]索引,也可以为每个节点添加另一个值,表示其右侧或左侧。