Algorithm null是二叉树吗?
所以我看到了一些例子,比如 如果树为null,则返回1或true。Algorithm null是二叉树吗?,algorithm,binary-tree,binary-search-tree,Algorithm,Binary Tree,Binary Search Tree,所以我看到了一些例子,比如 如果树为null,则返回1或true。 稍微扩展一下问题-假设我必须找到TreeSmall是TreeBig的子树,并且我的TreeSmall是null,那么checkSubtree(smallTree)的返回值应该是true还是false?true表示TreeSmall是一个树,其值为null。这对我来说没有意义。这取决于应用程序,是一个定义问题 编辑: 例如,维基百科对BST的“定义”如下: 在计算机科学中,二叉搜索树(BST),有时也称为有序或排序二叉树,是一
稍微扩展一下问题-假设我必须找到TreeSmall是TreeBig的子树,并且我的TreeSmall是
null
,那么checkSubtree(smallTree)
的返回值应该是true还是false?true
表示TreeSmall是一个树
,其值为null
。这对我来说没有意义。这取决于应用程序,是一个定义问题
编辑:
例如,维基百科对BST的“定义”如下:
在计算机科学中,二叉搜索树(BST),有时也称为有序或排序二叉树,是一种基于节点的二叉树数据结构,具有以下特性:
- 节点的左子树仅包含键小于节点键的节点
- 节点的右子树仅包含键大于节点键的节点
- 左子树和右子树也必须是二叉搜索树
- 不能有重复的节点
null
:
- 左子树不存在,因此没有违反此规则的节点->检查
- 与第一个相似->检查
- 如果所有这些测试都通过了,那么也会通过,因为两个子树都为null->check
- 当然没有重复->检查
因此,根据这个定义,
null
是一个有效的BST。您可以通过要求“必须有一个根节点”来反转它。它不影响BST的任何实际属性,但可能用于显式应用。在纯计算机科学中,null是有效的二叉树。它被称为空二叉树。就像空集仍然是有效集一样。此外,只有一个根节点且没有子节点的二叉树也是有效的(但不是空的)。有关更多信息,请参阅
但在实际实现中,有两种方法可以实现
两种方法都有效。第二种实现具有灵活性的优点。您可以将null传递给任何需要树的对象,并且它不会引发异常。第一个实现的优点是不浪费时间下降到空的“子节点”,并且不必在节点上运行的每个函数/方法的开头使用空检查。您只需对子项执行null检查即可。Ex falso sequitur quodlibet-因为“null”根本不是什么,所以可以将其解释为任何内容。这实际上是一个设计问题。有些人可能会声称checkSubTree()在这种情况下应该抛出类似IllegalArgumentException的东西。另一种方法是引入一种特殊类型的对象或实例,它表示一个空树(cf.)。这样的空对象将是所有帐户的树,例如
EmptyTree instanceof tree
,而null instanceof tree
将始终为false。这取决于您的实现。您可以确定null
是一棵树,也可以确定树中需要包含某些内容。只要你是一致的,一切都会成功的。通常最好有一个用于空树的公共静态最终空_树。通过这种方式,您可以避免所有那些乱扔代码的空检查,并且在忘记它们时也可以绕过NPE。