【问题标题】: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) 对于所有其他情况,请确定以下哪一项更有意义:(通常两者都可以,但一个更简洁)
- 您可以做哪些非递归工作,然后将问题简化为子问题并返回该解决方案(最后递归,可能是尾递归)
- 为了解决这个问题,您首先需要做哪些递归工作。 (开始递归,不是尾递归)
拥有私有辅助方法不一定是坏事;只要它们具有独特且有用的功能,您就不应该为编写它们而感到难过。当拆分成 3-4 种方法而不是将它们塞进一个方法时,肯定有一些递归问题更简洁且冗余更少。
在坐下来编写代码之前,先解决一些 BST 问题,看看是否能确定解决方案的一般结构。希望这可以帮助!此外,如果您专门询问 Java 的 BST 内容,您可能希望在您的问题上添加一个 java 标签。