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?
Advertisement
Answer
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; }