【问题标题】:Searching a Binary Tree in JavaScript [duplicate]在 JavaScript 中搜索二叉树 [重复]
【发布时间】:2014-06-17 11:12:53
【问题描述】:

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

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

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

【问题讨论】:

  • 你想知道什么高度值?
  • 这和"Binary"有什么关系?
  • 在这个例子中,你想要的最终结果是 - 27?还是我不明白你的问题?
  • 好吧,也许我错误地使用了二进制文件(只是根据我的搜索使用了这个,我没有处理这个问题的背景)。 -塞布鲁斯,
  • 我猜是27,从我的角度来看,它是最高值,-webkit

标签: javascript json


【解决方案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/

【讨论】:

  • 谢谢你,这会有所帮助,我只是读到这个。
  • Herp derp,我是盲人 o.O 这很好用,+1。
【解决方案2】:

如果理解正确,应该是这个样子。

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

【讨论】:

    【解决方案3】:

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

    字符串化对象并做正则表达式以获取该模式“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/

    【讨论】:

      【解决方案4】:

      我不会为你写代码,但基本上,任何其他语言都一样。

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

      如何使用 JavaScript 访问 JSON?

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

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

      对于数组访问,使用索引。由于parent 是一个数组,您可以通过tree.parent[0]tree['parent'][0] 访问孩子。

      不过,我更喜欢点法,以便在视觉上区分 JSON 和数组。

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

      【讨论】:

      • 谢谢你,事情已经明朗了
      • 你将不得不提到递归,那里......
      • @Cerbrus 是的,这里需要递归
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多