Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm null是二叉树吗?_Algorithm_Binary Tree_Binary Search Tree - Fatal编程技术网

Algorithm null是二叉树吗?

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),有时也称为有序或排序二叉树,是一

所以我看到了一些例子,比如

如果树为null,则返回1或true。
稍微扩展一下问题-假设我必须找到TreeSmall是TreeBig的子树,并且我的TreeSmall是
null
,那么
checkSubtree(smallTree)
的返回值应该是true还是false?
true
表示TreeSmall是一个
,其值为
null
。这对我来说没有意义。

这取决于应用程序,是一个定义问题

编辑:

例如,维基百科对BST的“定义”如下:

在计算机科学中,二叉搜索树(BST),有时也称为有序或排序二叉树,是一种基于节点的二叉树数据结构,具有以下特性:

  • 节点的左子树仅包含键小于节点键的节点
  • 节点的右子树仅包含键大于节点键的节点
  • 左子树和右子树也必须是二叉搜索树
  • 不能有重复的节点
让我们测试一下
null

  • 左子树不存在,因此没有违反此规则的节点->检查
  • 与第一个相似->检查
  • 如果所有这些测试都通过了,那么也会通过,因为两个子树都为null->check
  • 当然没有重复->检查

因此,根据这个定义,
null
是一个有效的BST。您可以通过要求“必须有一个根节点”来反转它。它不影响BST的任何实际属性,但可能用于显式应用。

在纯计算机科学中,null是有效的二叉树。它被称为空二叉树。就像空集仍然是有效集一样。此外,只有一个根节点且没有子节点的二叉树也是有效的(但不是空的)。有关更多信息,请参阅

但在实际实现中,有两种方法可以实现

  • 假设有效的二叉树必须至少有一个节点,并且不允许空树。每个节点不必有子节点。此树上的所有递归方法都不会下降到null级别。相反,当看到节点的左子节点或右子节点为空时,它们停止。只要不将null传递到任何需要树的地方,此实现就可以工作

  • 假设null是一个有效的二叉树(形式上,只是空树)。在这个实现中,在对指针执行任何操作(如检查左/右子指针等)之前,首先检查指针是否为null。这个实现适用于指向树的任何指针。您可以自由地将空指针传递给需要树的方法


  • 两种方法都有效。第二种实现具有灵活性的优点。您可以将null传递给任何需要树的对象,并且它不会引发异常。第一个实现的优点是不浪费时间下降到空的“子节点”,并且不必在节点上运行的每个函数/方法的开头使用空检查。您只需对子项执行null检查即可。

    Ex falso sequitur quodlibet-因为“null”根本不是什么,所以可以将其解释为任何内容。这实际上是一个设计问题。有些人可能会声称checkSubTree()在这种情况下应该抛出类似IllegalArgumentException的东西。另一种方法是引入一种特殊类型的对象或实例,它表示一个空树(cf.)。这样的空对象将是所有帐户的树,例如
    EmptyTree instanceof tree
    ,而
    null instanceof tree
    将始终为false。

    这取决于您的实现。您可以确定
    null
    是一棵树,也可以确定树中需要包含某些内容。只要你是一致的,一切都会成功的。通常最好有一个用于空树的公共静态最终空_树。通过这种方式,您可以避免所有那些乱扔代码的空检查,并且在忘记它们时也可以绕过NPE。