【发布时间】:2014-10-16 21:31:59
【问题描述】:
我创建了一个二叉搜索树类。我创建了插入方法、高度方法和打印方法。当我插入时,一切看起来都很好。如果根为空,我创建一个新根并设置项目。但是当我调用我的高度方法时,它会打印出 2 而不是 1。当我调用我的打印方法时,它会打印出包括 root 在内的所有元素两次。例如,我按以下顺序插入了以下元素:9、5、4、55、555
当我调用我的 PREorderPRINT 方法时,它会打印出:9、5、4、9、55、555
打印的值是正确的,除了我从未插入的中间重复的 9。我的插入方法不使用递归。但我的身高和打印方法使用递归。
我的递归 preOrderPrint 检查是否 root!=null,然后打印项目,向左,向右。当我在公共 preorder 方法中调用 preorder 时,我首先检查它的树是否为空,如果不是,则通过将 root 传递给 preOrderPRint(root) 来打印它
我的递归高度方法检查根是否为空并返回零。如果不是,它获取根的左右子树的高度,比较它们,并返回左+1 或右+1。当我调用我的公共高度方法时,我检查 root 是否为 null 并返回零,否则调用传入 root 的递归高度。
当我在树中插入一个元素 9 并调用我的 height 方法时,它打印出高度为 2。但我的 size 方法打印出正确的大小 1。我的递归一定有问题preorderPrint 和 height 方法。我似乎无法弄清楚我错过了什么。有没有我忘记添加的特殊情况?
编辑:我发布了代码并删除了它。修复了问题。我所要做的就是将一个 else 更改为一个 else-if 并添加一个条件来比较根与插入的项目。我犯了一个愚蠢的错误。
【问题讨论】:
-
你能添加一些代码吗?
-
我无法添加代码。如果有同学抄了,被教授发现了,那我就得不分了。我的教授有一双敏锐的眼睛。但是我上面写的对应我的代码。这些是我搜索和插入的所有案例。我所有的语法都是正确的。我相信我错过了一些特殊情况。我想知道是否有人有任何想法,即使是最小的。
-
没有源代码很难调试程序。如果没有它,这个问题也不太可能对其他用户有用。至少能提供一些伪代码吗?
-
问题必须在插入中。您只共享了根创建,而不是后续插入。 preOrder & height 的描述有正确的概念。你能提供插入的伪代码吗?另请注意,在 BST 中,通常有某种形式的比较,以便以某种方式对值进行排序。我相信您的 preOrder 应该按升序返回整数。
-
我修好了。我所要做的就是将 else 语句更改为 else-if 并添加一个比较条件。我花了 2 个小时试图修复它。感谢那些发布帮助的人:)
标签: java insert tree binary-search-tree