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语句。。非常感谢。