【问题标题】:Tips on solving binary tree/binary search tree problems using recursion (Java)使用递归 (Java) 解决二叉树/二叉搜索树问题的技巧
【发布时间】:2014-10-11 15:08:11
【问题描述】:

我正在审查如何使用递归解决 Java 中的二叉树/二叉搜索树问题,我觉得我有点挣扎。例如:操作/更改树中的节点,计算某些模式(偶数整数,树的高度)等。我几乎总是使用私有辅助方法。

我想听听一些经验法则,让我的生活更轻松地解决这些问题。提前致谢!

编辑:更具体....我只是在谈论涉及使用递归解决二叉树/BST 问题的任何类型的问题。我不是在谈论任何一个问题。在创建解决这些问题的方法时,我想知道解决这些问题的策略。喜欢在解决问题时始终包含或考虑的某些事情。我无法比这更具体。感谢投票。

【问题讨论】:

  • 你必须更具体。

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


【解决方案1】:

首先,请始终记住,您正在研究的是 BST,而不是未排序的二叉树或非二叉通用树。这意味着您始终可以依赖 BST 不变量:左子树中的每个值

除此之外,像对待任何递归问题一样对待它。这意味着,对于给定的问题:

1) 确定哪些情况是微不足道的并且不需要递归。编写正确识别这些情况并返回简单结果的代码。一些可能性包括高度为 0 的树,或没有树(空根)。

2) 对于所有其他情况,请确定以下哪一项更有意义:(通常两者都可以,但一个更简洁)

  1. 您可以做哪些非递归工作,然后将问题简化为子问题并返回该解决方案(最后递归,可能是尾递归)
  2. 为了解决这个问题,您首先需要做哪些递归工作。 (开始递归,不是尾递归)

拥有私有辅助方法不一定是坏事;只要它们具有独特且有用的功能,您就不应该为编写它们而感到难过。当拆分成 3-4 种方法而不是将它们塞进一个方法时,肯定有一些递归问题更简洁且冗余更少。

在坐下来编写代码之前,先解决一些 BST 问题,看看是否能确定解决方案的一般结构。希望这可以帮助!此外,如果您专门询问 Java 的 BST 内容,您可能希望在您的问题上添加一个 java 标签。

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多