java - 总是向左|向右的树中下降路径的最大长度

标签 java algorithm binary-search-tree

我正在准备技术面试,所以基本上是从头开始学习算法:) 我们得到了 BST。我需要在其中找到 desc 路径的最大长度,它总是向左或向右 也就是说,一个示例树的下降路径是2,即15-10-6

   5
  / \
2     15
     /
    10
   / \ 
  6   14

我对算法问题很陌生。解决这个问题的步骤是什么?

我的想法是使用 DFS 和一个计数器来存储最长路径。 但我不知道如何使用递归来完成这项工作,而递归对于这种数据结构来说似乎更自然。

有什么建议/方向吗?

最佳答案

措辞有点困惑,但我认为你的意思是最大值

  • 从任何节点开始然后只向左移动的路径的最大长度,或者
  • 从任何节点开始然后只向右移动的路径的最大长度。

您分两次执行此操作,一次寻找最大左侧路径,一次寻找最大右侧路径(然后取这两个路径中的最大值)。或者,您可以一次性完成这两项操作。

对于每个节点,您想知道三个值:

  1. 从该节点开始的左路径的长度,
  2. 从该节点开始的正确路径的长度,以及
  3. 从该节点或其后代之一开始的最长路径的长度。

如果您递归执行此操作,这意味着递归应该返回这三个值,可能作为一个小数组或作为一个简单的三字段对象。

这看起来像

Results calculate(Tree node) {
    if (node == null) return new Results(0,0,0);
    else {
        Results leftResults = calculate(node.left);
        Results rightResults = calculate(node.right);
        int leftLength = 1 + leftResults.leftLength;
        int rightLength = 1 + rightResults.rightLength;
        int maxLength = Math.max(Math.max(leftLength, rightLength), 
                                 Math.max(leftResults.maxLength, rightResults.maxLength));
        return new Results(leftLength, rightLength, maxLength);
    }
}

整体结果将只是calculate(root).maxLength

关于java - 总是向左|向右的树中下降路径的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299738/

相关文章:

algorithm - 浮点指数求幂算法

在线性时间内组合两个二叉搜索树的算法

java - 获取 java.util.InputMismatchException?

java - 如何将多维数组中的元素相加?

algorithm - 是否需要在循环前后都定义循环不变量?

arrays - 在一组 {0......2^k -1} 范围内找到缺失的数字

c++ - bst分割故障搜索

java - 处理 bst 中的重复项

java - oracle海量数据复杂报表

java - Hadoop单节点安装报错