二叉搜索树中的最低值路径

时间:2016-10-05 21:44:59

标签: java tree binary-search-tree

最近在一次采访中被问到这个问题并且感到难过。

给定一个二叉树,其中节点包含整数值,找到总和最小值的路径(一直向下到叶子)。

所以从root开始并以深度优先的方式一直向下遍历,直到你得到一个叶子并沿途添加节点值。对叶子的每条可能路径重复。

我对可能存在的可能性感到不知所措。但我试着做一个dfs,一路上加上值,直到我得到一片叶子。在hashmap中存储路径和总和。但后来我无法弄清楚如何重置当前的总和,并在第二次沿着不同的路径走向不同的路径。

2 个答案:

答案 0 :(得分:0)

可以通过以下方式解决:想象一下我们定义函数lowestValuePath(path, currentValue, bst),它将路径作为字符串表示(“lrlrr”相当于左,右,左,右,右) ,一个值,它是沿此路径的节点值的当前累积总和,以及bst是要遍历的树。

我们的起始案例是lowestValuePath("", 0, rootNode),终止将发生在一个叶子上,返回遍历的路径和沿此路径累积的值。

Java-ish伪代码可以是:

TraverseResult {
  String path;
  int value;
}

TraverseResult lowestValuePath(path, currentValue, bst) {
  val newValue = currentValue + bst.getNodeValue();
  if bst.isLeaf():
    return new TraverseResult(path, newValue);
  else
    val rightPath = lowestValuePath(path + "r", newValue, bst.getRightNode());
    val leftPath = lowestValuePath(path + "l", newValue, bst.getLeftNode());
    return leftPath < rightPath ? leftPath : rightPath
}

可能需要对空树进行一些特殊情况处理..

答案 1 :(得分:0)

如果它是&#34;二进制搜索树&#34;,那么对于每个节点T:   左(T)&lt; = T&lt; =右(T)

所以实际上只是一直向左转,你会得到最低值。