【问题标题】:Re: Given a binary search tree and a number, find a path whose node's data added to be the given numberRe:给定一个二叉搜索树和一个数字,找到一个路径,其节点的数据添加为给定数字
【发布时间】:2011-12-29 05:32:14
【问题描述】:

我看到了这个问题:Given a binary search tree and a number, find a path whose node's data added to be the given number.

上面说给定一个二叉搜索树和一个数字,查找是否存在从根到叶的路径,使得路径上的所有数字加起来就是给定的数字。

该线程上的每个人似乎都知道执行此操作的递归方式。

我错过了什么吗?你如何递归地解决这个问题?你必须暴力破解整棵树吗?

有人可以就如何做到这一点给出一个大纲(粗略的想法)吗?

【问题讨论】:

  • 树排序了吗?如果不是,那么蛮力是唯一实际的选择。给定一个排序树,您可以通过消除任何会使您超出所需总数的“右手”分支来进行某些优化。
  • 为什么不直接问原帖呢?他声称知道该怎么做。
  • @MarcB:二叉搜索树按定义排序
  • 如果树只包含 +ve 数字,这很简单。只需进行深度优先遍历,从根开始跟踪当前总和。一旦你超过目标,然后回溯。不确定如何将其扩展到 -ve 数字。

标签: algorithm binary-tree binary-search binary-search-tree


【解决方案1】:

递归方法类似于f(node, len),当您通过左侧或右侧节点时,您将其更改为f(node->left, len-left)f(node->right,len-right)。当您下到叶子时,您会检查当前的len==0 是否已完成。

这种递归方法实际上与蛮力相同,但是,您可以使用记忆技术使其更快,就像我在那篇文章中所说的那样。

【讨论】:

    【解决方案2】:

    几乎如你所料:遍历树,其中子节点上的调用的目标值是调用者的目标值减去调用者的值;当叶子具有目标值时,搜索停止。因为它是 BST,所以只要该子节点的目标小于当前节点的值(b/c 右子树中的所有内容都不少),您就可以切断右子节点的搜索。

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 2014-03-22
      • 2021-09-26
      • 1970-01-01
      • 2021-11-24
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多