I need to return an array of nodes sorted from high to low. At the moment I am trying to implement an inorder traversal which gives me the exact opposite of what I'm looking for.
The tree looks like:
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
My function looks like:
listOfficersByExperience(officerNames = []) {
if (this.leftReport) {
officerNames = this.leftReport.listOfficersByExperience(officerNames);
}
officerNames.push(this.officerName);
if (this.rightReport) {
officerNames = this.rightReport.listOfficersByExperience(officerNames);
}
return officerNames;
}
From this, I receive:
[
'Lt. Cmdr. Worf',
'Lieutenant Security-Officer',
'Commander Riker',
'Lt. Cmdr. LaForge',
'Captain Picard',
'Commander Data',
'Lt. Cmdr. Crusher',
'Lieutenant Selar'
]
When I need to receive:
[
'Lieutenant Selar',
'Lt. Cmdr. Crusher',
'Commander Data',
'Captain Picard',
'Lt. Cmdr. LaForge',
'Commander Riker',
'Lieutenant Security-Officer',
'Lt. Cmdr. Worf'
]
Is there a way that I can reverse these nodes or is there a different sorting method that I need/should implement?
You should just swap the two if
statements where you make a recursive call, so that you first visit rightReport
and then later 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;
}