Javascript 读取数组“从左到右”,二进制堆优先级

Javascript 读取数组“从左到右”,二进制堆优先级,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我有一段简单的代码,可以读取一个值数组。在用户输入时,比较两个值并将其设置为二进制堆。该方法如下所述: 彼得把每个要求都写在一张纸上,然后堆起来。在一个 第二步,他从 把它堆起来,放在白板上。然后他又拿了一个 桩和小组讨论的要求7 哪项要求5或7更重要。最后他们 同意要求7不如要求5重要。彼得 将需求7放在需求5的左下角。然后他采取行动 另一项要求是第4条,小组再次对此进行了比较 符合要求5。在得出结论后,它也变得越来越少 比要求5更重要的是,他们将其与要求7进行比较。他们 同意这比要求7更重要

我有一段简单的代码,可以读取一个值数组。在用户输入时,比较两个值并将其设置为二进制堆。该方法如下所述:

彼得把每个要求都写在一张纸上,然后堆起来。在一个 第二步,他从 把它堆起来,放在白板上。然后他又拿了一个 桩和小组讨论的要求7 哪项要求5或7更重要。最后他们 同意要求7不如要求5重要。彼得 将需求7放在需求5的左下角。然后他采取行动 另一项要求是第4条,小组再次对此进行了比较 符合要求5。在得出结论后,它也变得越来越少 比要求5更重要的是,他们将其与要求7进行比较。他们 同意这比要求7更重要。彼得提出 要求4位于要求7的右下角。小组重复了一遍 本程序适用于桩的所有要求。最后,他们成功了 在白板上创建了所有要求的BST。最后,彼得 按优先级顺序创建所有需求的列表。为此他 开始记下最右边的需求编号 BST要求6。他继续提出最接近的要求 要求8,然后是最接近要求10的下一个, 等等所有需求的最终优先顺序为 从高到低6、8、10、9、3、5、4、7、2和1。名单 现在可以使用优先化的需求来选择要满足的需求 将在下一版本中实现

河豚 功能测试{ var任务=[a,b,c,d,e,f,g,h,i,j,k,l]; //根 var root=[tasks[0]]; 函数prioq,步骤{ //与步骤[0]相比,现在我只说“随机”对这个演示或多或少重要; var res=Math.random>.5; 如果存在{ 如果!步骤[2]{ 步骤[2]=[q]; }否则{ prioq,步骤[2] } }否则{ 如果!步骤[1]{ 步骤[1]=[q] }否则{ prioq,步骤[1] } } } 对于变量i=1;i 执行顺序很重要,首先查找右子级并遍历,显示节点信息,然后迭代左子级

函数遍历{ if Array.isArraya{ a[2]&&traversea[2]; a[0]&&document.writea[0]+; a[1]&&traversea[1]; } } 变量根=[5、[7、[2、[1]]、[4]]、[9、[3]、[8、[10]、[6]]; 文件。书写;
特拉弗塞罗 好的,我写了这个函数:

JavaScript

// example tasks at this branch level
var tasks = [["a", 1, 2], ["b", 0, 1], ["c", 3, 0], ["d", 4, 1]];

// make a copy so that original task list is maintained
var tasksCopy = tasks;

// sort the array from lowest left node to highest left node      
var sortedLowToHigh = tasksCopy.sort(function(a, b) { 
     return a[1] - b[1];
});

// the lowest value will be at the first array element
var highestPriorityTask = sortedLowToHigh[0][1];

// sort the arry from highest right node to lowest right node
var sortedHighToLow = tasksCopy.sort(function(a, b){
     return b[2] - a[2];
});

// the highest value will be at the first array element
var lowestPriorityTask = sortedHighToLow[0][2];

序列化树状态,并在每个分支级别使用排序方法分析哪个分支较高/较低,直到遍历整个树为止。将最高/最低值存储在函数外部的全局变量中。即使当前分支级别不是二进制系统,这也应该有效。下面是一个示例,说明递归函数中的代码对于每个级别可能是什么样的:


就代码行而言,我认为这个答案是最好的:

函数遍历{ return!Array.isArrayn ?isNaNn?[]:[n] :[…traversen[2],…traversen[0],…traversen[1],]; } 变量根=[5、[7、[2、[1]]、[4]]、[9、[3]、[8、[10]、[6]];
console.logtraverseroot;结果不正确:6、10、8、3、9、4、1、2、7、5而不是6、8、10、9、3、5、4、7、2、1左侧比主元素优先级更高,例如OP示例中的优先级比5高7您看到了随机元素,这使得比较困难吗?我使用静态列表和OPs示例测试了您的代码。所以不,不是随机的。就我对随机字符串的测试而言,在纸上画它,并用你的结果检查,它是正确的。非常令人印象深刻,谢谢!ps我不知道&&诀窍,使它更具可读性@Argon,6,8,10是正确的结果吗?这是一个简单的按顺序遍历树的过程。
// example tasks at this branch level
var tasks = [["a", 1, 2], ["b", 0, 1], ["c", 3, 0], ["d", 4, 1]];

// make a copy so that original task list is maintained
var tasksCopy = tasks;

// sort the array from lowest left node to highest left node      
var sortedLowToHigh = tasksCopy.sort(function(a, b) { 
     return a[1] - b[1];
});

// the lowest value will be at the first array element
var highestPriorityTask = sortedLowToHigh[0][1];

// sort the arry from highest right node to lowest right node
var sortedHighToLow = tasksCopy.sort(function(a, b){
     return b[2] - a[2];
});

// the highest value will be at the first array element
var lowestPriorityTask = sortedHighToLow[0][2];