Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将二叉搜索树从最大到最小排序?_Javascript_Algorithm_Binary Search Tree - Fatal编程技术网

Javascript 如何将二叉搜索树从最大到最小排序?

Javascript 如何将二叉搜索树从最大到最小排序?,javascript,algorithm,binary-search-tree,Javascript,Algorithm,Binary Search Tree,我需要返回一个从高到低排序的节点数组。目前,我正在尝试实现一个顺序遍历,它给了我与我所寻找的完全相反的结果 这棵树看起来像: 10. Captain Picard / \ 6. Commander Riker 11. Commander Data / \ \ 4. Lt. Cmdr.

我需要返回一个从高到低排序的节点数组。目前,我正在尝试实现一个顺序遍历,它给了我与我所寻找的完全相反的结果

这棵树看起来像:

                 10. Captain Picard
                 /                  \
          6. Commander Riker       11. Commander Data
            /         \               \
    4. Lt. Cmdr.   7. Lt. Cmdr.     12. Lt. Cmdr.
        Worf           LaForge           Crusher
             \                           \
        5. Lieutenant                  13. Lieutenant
        security-officer                    Selar
listOfficersByExperience(officerNames = []) {
    if (this.leftReport) {
      officerNames = this.leftReport.listOfficersByExperience(officerNames);
    }

    officerNames.push(this.officerName);

    if (this.rightReport) {
      officerNames = this.rightReport.listOfficersByExperience(officerNames);
    }

    return officerNames;
}
我的函数如下所示:

                 10. Captain Picard
                 /                  \
          6. Commander Riker       11. Commander Data
            /         \               \
    4. Lt. Cmdr.   7. Lt. Cmdr.     12. Lt. Cmdr.
        Worf           LaForge           Crusher
             \                           \
        5. Lieutenant                  13. Lieutenant
        security-officer                    Selar
listOfficersByExperience(officerNames = []) {
    if (this.leftReport) {
      officerNames = this.leftReport.listOfficersByExperience(officerNames);
    }

    officerNames.push(this.officerName);

    if (this.rightReport) {
      officerNames = this.rightReport.listOfficersByExperience(officerNames);
    }

    return officerNames;
}
从中,我得到:

[
  'Lt. Cmdr. Worf',
  'Lieutenant Security-Officer',
  'Commander Riker',
  'Lt. Cmdr. LaForge',
  'Captain Picard',
  'Commander Data',
  'Lt. Cmdr. Crusher',
  'Lieutenant Selar'
]
当我需要接收:

[
  'Lieutenant Selar',
  'Lt. Cmdr. Crusher',
  'Commander Data',
  'Captain Picard',
  'Lt. Cmdr. LaForge',
  'Commander Riker',
  'Lieutenant Security-Officer',
  'Lt. Cmdr. Worf'
]

是否有一种方法可以反转这些节点,或者是否有一种我需要/应该实现的不同排序方法?

您应该在进行递归调用时交换两个
if
语句,以便首先访问
rightReport
,然后访问
leftReport

listOfficersByExperience(officerNames = []) {
    if (this.rightReport) {
      officerNames = this.rightReport.listOfficersByExperience(officerNames);
    }

    officerNames.push(this.officerName);

    if (this.leftReport) {
      officerNames = this.leftReport.listOfficersByExperience(officerNames);
    }

    return officerNames;
}

一个简单的气泡排序就是你所需要的。为什么是树?这就是当前存储数据的方式吗?这就像
arr.sort((a,b)=>b-a)一样简单@RandyCasburn Bubble sort不应用于任何目的,除非学习排序算法。@kaya3-Array.prototype.sort()实现了一个冒泡排序-我的建议是使用它,正如我的评论所述。即使考虑到这一点,btree在这里也是错误的工具,除非OP被指示这样做。@RandyCasburn不,它实现了一个排序算法,您通常不需要知道哪个排序算法,我也不知道有哪个实现使用冒泡排序。另外,这个问题并没有提到用例,所以我不知道为什么你认为BST是错误的,除非你认为BST总是错误的,不管用例如何;有很多问题,BST的性能要比每次插入新元素时都要排序的数组好。@kaya3-是的,我的泛化太广泛,而且不正确。我并不讨厌BST。虽然我的观点无关紧要,但使用
.sort()
的务实方法吸引了我。哇,就是这样。。我试图实现各种方法,但没有想到切换这个if语句。。非常感谢。