二进制树和二进制搜索树之间的区别


Answers:


566

二叉树:每个节点最多有两片叶子的树

  1
 / \
2   3

二进制搜索树:用于搜索。一个二叉树,其中左子节点包含值小于父节点的节点,而右子节点包含值大于或等于父节点的节点。

  2
 / \
1   3

14
@pete:这是一个概念性的事情,您不一定会真正制作出完全不受约束的东西。但是,有许多非搜索二进制树以其他某种方式很特殊,例如二进制堆。
user541686

19
@pete二叉树不一定必须包含可比较的数据,许多(非搜索)二叉树用于解析代数表达式,二叉树非常适合通过将运算符放置为节点和数值来编写中缀表示法解析器像叶子一样
JBoy 2015年

2
@JBoy:在那种情况下,它们不会是二叉树。(例如,一元运算符不能有两个子代。)我真的想不出无约束的二叉树的实际用例,这就是为什么我发表这一评论。
user541686

2
伟大而简单。视觉示例+1 :)
Andrei Konstantinov

@Mehrdad一棵二叉树每个节点有一个或两个孩子。表达式树就是一个很好的例子。二进制搜索树在每个节点上有一个或两个子节点,除非它碰巧已满,这只能在一定数量的元素上发生。
罗恩侯爵,2015年

56

二叉树是带有两个孩子(左孩子和右孩子)的的一种特殊形式。它只是树结构中的数据表示

二进制搜索树(BST)是二进制树的一种特殊类型,它满足以下条件:

  1. 左子节点小于其父节点
  2. 右子节点大于其父节点

23
这些条件是不够的。整个左子树中的键不得少于父级,而整个右子树中的节点必须大于父节点。
罗恩侯爵

1
@EJP您能详细说明一下吗?整个子树是什么意思?您的意思是子树的所有值应小于左侧的根?并且所有值都应该大于右侧的根值?
Asif Mushtaq,

在第二个链接之后,阅读有关“验证”的部分,这将很清楚。
罗布

38

二叉树由节点组成,其中每个节点包含一个“左”指针,一个“右”指针和一个数据元素。“根”指针指向树中的最高节点。左右指针递归地指向两侧的较小“子树”。空指针表示没有元素的二叉树-空树。正式的递归定义是:二叉树不是空的(由空指针表示),还是由单个节点组成,其中左右指针(前面的递归定义)每个都指向二叉树。

二叉搜索树(BST)或“有序二叉树”是一种二叉树,其中的节点按顺序排列:对于每个节点,其左子树中的所有元素都小于节点(<),而所有元素在其右子树中大于节点(>)。

    5
   / \
  3   6 
 / \   \
1   4   9    

上面显示的树是二叉搜索树-“根”节点为5,其左子树节点(1、3、4)小于5,其右子树节点(6、9)大于5。递归地,每个子树还必须服从二进制搜索树约束:在(1、3、4)子树中,3是根,1 <3和4> 3。

注意问题中的确切措辞-“二叉树”与“二叉树”不同。


@GabrielStaples添加了树结构。
Gaurav Borole

14

正如以上每个人都对二叉树和二叉树的区别进行了解释,我只是添加了如何测试给定的二叉树是否为二叉树。

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

希望对您有帮助。对不起,如果我偏离主题,我觉得在这里值得一提。


1
左或右子树都可以为空。您的代码无法正确处理这种情况。
罗恩侯爵

11

二叉树代表一个数据结构,它是由最高的节点,可以拥有两个孩子的引用。

另一方面,Binary Search TreeBST)是Binary Tree数据结构的一种特殊形式,其中每个节点都有一个可比较的值,较小值的子级附加在左侧,较大值的子级附加在右侧。

因此,所有BST都是二叉树,但是只有一些二叉树也可能是BST。通知BSTBinary Tree的子集。

因此,二叉树比二叉搜索树更像是一种通用的数据结构。并且您还必须通知Binary Search Tree是一个排序树,而通用Binary Tree没有这样的规则集。

二叉树

Binary Tree这是一个BST;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

二叉搜索树(排序树)

叉搜索树,也是二叉树 ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

二进制搜索树节点属性

同时通知BST中的任何父节点 ;

  • 所有左节点的值都小于父节点的值。在上面的示例中,值{20,25,30} 都位于 50 的左侧左后代)的节点小于50。

  • 所有正确的节点的值都大于父节点的值。在上面的示例中,值{70、75、80} 都位于 50 的右边右后代)的节点大于50。

对于二叉树节点没有这样的规则。二叉树节点的唯一规则是有两个孩子,因此它自己解释为什么称其为binary


我们可以实现简单的二叉树吗?有可用的实现方式吗?这棵树有什么用?
Asif Mushtaq

@UnKnown您可以使用二进制搜索树进行排序和搜索。:你可以在这里找到二叉搜索树的执行github.com/bzdgn/data-structures-in-java/blob/master/src/...
勒Divilioglu

我知道这一点,但是是否存在简单树或简单二叉树?或简单二进制树的任何实现?
阿西夫·穆斯塔克

没有必要使用它,但是您可以将任意Node实例添加到根节点和子节点。
Levent Divilioglu

10

二进制搜索树是一种特殊的二进制树,它具有以下特性:对于任何节点n,n的左子树中的每个后代节点的值都小于n的值,而右子树中的每个后代节点的值都为n。大于n的值。


8

二叉树

二叉树可以是具有2个孩子和1个父母的任何东西。它可以实现为链接列表或数组,也可以使用您的自定义API实现。一旦开始向其中添加更具体的规则,它就会变成更专业的树。最常见的已知实现是,在左侧添加较小的节点,在右侧添加较大的节点。

例如,大小为9,高度为3的带标签的二叉树,其根节点的值为2。树是不平衡的,并且未排序https://zh.wikipedia.org/wiki/二叉树

在此处输入图片说明

例如,在左侧的树中,A有6个子元素{B,C,D,E,F,G}。可以将其转换为右侧的二叉树。

在此处输入图片说明

二元搜寻

二进制搜索是一种技术/算法,用于在节点链上查找特定项目。二进制搜索适用于排序数组

二进制搜索将目标值与数组的中间元素进行比较;如果它们不相等,则消除目标不能位于其中的那一半,并继续搜索剩余的一半直到成功或剩余的一半为空。https://zh.wikipedia.org/wiki/Binary_search_algorithm

在此处输入图片说明

一棵代表二进制搜索的树。在此搜索的数组为[20、30、40、50、90、100],目标值为40。

在此处输入图片说明

二叉搜索树

这是二叉树的实现之一。这是专门用于搜索的

二进制搜索树和B树数据结构基于二进制搜索

二进制搜索树(BST),有时也称为有序或排序的二进制树,是容器的一种特殊类型:在内存中存储“项目”(例如数字,名称等)的数据结构。https://zh.wikipedia.org/wiki/Binary_search_tree

二进制搜索树,大小为9,深度为3,根为8。叶子没有画。

在此处输入图片说明

最后是用于比较知名数据结构和算法性能的出色方案:

在此处输入图片说明

图片取自Algorithms(第4版)


4

二叉树是其子代不超过两个的树。二叉搜索树遵循不变性,即左子项的值应小于根节点的键,而右子项的值应大于根节点的键。


4
  • 二进制搜索树:对二进制树进行有序遍历时,将获得插入项的排序值
  • 二叉树:在任何类型的遍历中都找不到排序的顺序

无排序顺序需要被发现。二进制搜索树也是二进制树。它们不是互斥的。BST是BT的适当子集。
罗恩侯爵,2015年

3

要检查给定的二叉树是否为二叉树,这里是另一种方法。

有序方式遍历树(即,左子节点->父节点->右子节点),将遍历的节点数据存储在一个临时变量中,例如temp,然后再存储到temp中,检查当前节点的数据是否高于先前节点的数据。然后打破它,树不是二叉搜索树,否则遍历直到结束。

以下是Java的示例:

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

外部保持温度变量


任一子树都可以为null。您的算法无法正确处理这种情况。
罗恩侯爵,

1

在二叉搜索树中,所有节点均以特定顺序排列-根节点左侧的节点的值小于其根节点的值,节点右侧的所有节点的值均大于节点的值。根。


0

当且仅当任何一个节点的最大子代数为2时,树才能称为二叉树。

当且仅当任何一个节点的最大子节点数为2并且左子节点始终小于右子节点时,才可以将树称为二叉搜索树。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.