微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何停止二叉搜索树遍历?

如何解决如何停止二叉搜索树遍历?

我需要遍历一个二叉搜索树并返回一个叶节点数组。目前我正在遍历整棵树并一次返回一个节点。

我的树看起来像:

                 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

到目前为止我有

  findOfficersWithNoDirectReports(values = []) {
    if (this.officerName === null) return;

    if (this.leftReport) {
      this.leftReport.findOfficersWithNoDirectReports(
        this.leftReport.officerName
      );
    }

    if (this.rightReport) {
      this.rightReport.findOfficersWithNoDirectReports(
        this.rightReport.officerName
      );
    }
    return values;
  }

我的类构造函数有:官员ID、官员姓名、报告到、左报告、右报告。如果我 console.log(this) 它看起来像:

StarshipEnterprise {
  officerId: 10,officerName: 'Captain Picard',reportTo: null,leftReport: StarshipEnterprise {
    officerId: 6,officerName: 'Commander Riker',reportTo: [Circular],leftReport: StarshipEnterprise {
      officerId: 4,officerName: 'Lt. Cmdr. Worf',leftReport: null,rightReport: [StarshipEnterprise]
    },rightReport: StarshipEnterprise {
      officerId: 7,officerName: 'Lt. Cmdr. LaForge',rightReport: null
    }
  },rightReport: StarshipEnterprise {
    officerId: 11,officerName: 'Commander Data',rightReport: StarshipEnterprise {
      officerId: 12,officerName: 'Lt. Cmdr. Crusher',rightReport: [StarshipEnterprise]
    }
  }
}

我应该得到:

["Lieutenant Security-Officer","Lt. Cmdr. LaForge","Lieutenant Selar"]

要返回叶节点数组,当 leftReportrightReportnull 时,我如何停止树遍历?

解决方法

findOfficersWithNoDirectReports() {
    // If this is a leaf node,return the officer name
    if (!this.leftReport && !this.rightReport) {
      return [this.officerName]
    }

    // Otherwise,combine the left and right results 
    val result = []
    if (this.leftReport) {
      result = result.concat(this.leftReport.findOfficersWithNoDirectReports());
    }
    if (this.rightReport) {
      result = result.concat(this.rightReport.findOfficersWithNoDirectReports());
   }
    return result;

  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。