【问题标题】:Who can better explain what this snippet of code does line by line [closed]谁能更好地逐行解释这段代码的作用[关闭]
【发布时间】:2019-06-21 14:16:39
【问题描述】:

我试图理解这段代码的 sn-p,但我完全无法理解。解释math.Max()如何找到一棵树的高度

  /**
   * @return {number}
   */
  get leftHeight() {
    if (!this.left) {
      return 0;
    }

    return this.left.height + 1;
  }

  /**
   * @return {number}
   */
  get rightHeight() {
    if (!this.right) {
      return 0;
    }

    return this.right.height + 1;
  }

  /**
   * @return {number}
   */
  get height() {
    return Math.max(this.leftHeight, this.rightHeight);
  }

【问题讨论】:

  • 你不明白的地方能不能具体点?
  • 您应该发布整个代码,至少是围绕此的class 及其constructor,以便我们了解您的二叉树是如何定义的。
  • developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - 以上只是一系列吸气剂,最后一个吸气剂返回前两个的最大值 - 看看它,它可能试图将两列的高度相等最后一个getter返回左右两个元素的最大高度
  • 是语法问题,还是计算高度的算法有问题?
  • "我似乎无法更好地理解它" - 请详细说明您对每一行的理解

标签: javascript data-structures binary-tree


【解决方案1】:

get leftHeight()get rightHeight() 是递归的,正如他们自称的那样。 get leftHeight() 将返回您可以从给定节点向左走多少次,get rightHeight() 将返回您可以从给定节点向右走多少次。 get height() 将返回最大的那个,实际上不是节点的高度。

例如:

此树中顶部2 节点的.height 将是连续左移的最大值:2 (2, 7, 2) 和连续右移:2 (2, 5, 9),返回 2 .

要获取此节点的实际高度,您需要为递归中的每个节点返回.height,因此每次递归时都会返回最大高度。

get leftHeight()get rightHeight() 中的递归分别在(!this.left)(!this.right) 为真时停止,这只是检查它是否未定义并且节点分别没有左节点或右节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2023-04-10
    • 2017-04-22
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多