二叉树和二叉搜索树之间的区别

时间:2011-06-17 00:42:38

标签: data-structures tree binary-tree binary-search-tree

任何人都可以通过示例来解释二叉树二进制搜索树 之间的区别吗?

12 个答案:

答案 0 :(得分:534)

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

  1
 / \
2   3

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

  2
 / \
1   3

答案 1 :(得分:54)

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

Binary Search Tree (BST) 是一种特殊类型的二进制树,遵循以下条件:

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

答案 2 :(得分:36)

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

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

    5
   / \
  3   6 
 / \   \
1   4   9    

上面显示的树是二叉搜索树 - “根”节点是5,其左子树节点(1,3,4)是&lt;如图5所示,其右子树节点(6,9)是> 5.递归地,每个子树还必须服从二元搜索树约束:在(1,3,4)子树中,3是根,1 <1。 &lt; 3和4&gt; 3.

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

答案 3 :(得分:13)

正如上面的每个人都解释了二叉树和二叉搜索树之间的区别,我只是添加如何测试给定的二叉树是否是二叉搜索树。

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);

}

希望它会对你有所帮助。对不起,如果我偏离主题,因为我觉得这里值得一提。

答案 4 :(得分:10)

二叉搜索树是一种特殊的二叉树,它具有以下属性:对于任何节点n,n的左子树中的每个后代节点的值都小于n的值,并且每个后代节点的值都在right subtree大于n的值。

答案 5 :(得分:10)

二叉树代表数据结构,它由节点组成, >两个孩子引用。

另一方面,

二进制搜索树 BST )是二叉树数据结构的一种特殊形式,其中每个节点具有可比较的价值,附属于左侧的较小有价值的儿童和附在右侧的较大有价值的儿童。

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

因此,二叉树二进制搜索树更像是一般数据结构。此外,您必须通知二进制搜索树已排序树,而通用二叉树没有这样的规则。

二叉树

Binary Tree a BST;

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

二进制搜索树(已排序树)

二进制搜索树,它也是二叉树;

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

二进制搜索树节点属性

同时通知 BST 中的父节点;

  • 所有左节点的值都小于父节点的值。在上面的示例中,值<20,25,30}的全部位于左侧左后代)为50的节点小于50。 / p>

  • 所有正确的节点都具有比父节点的值更大的值。在上面的示例中,值<70,75,80} 全部位于右侧右后代)为50的节点大于50。 / p>

二叉树节点没有这样的规则。 二叉树节点的唯一规则是拥有两个子节点,因此它自我解释为什么称为二进制

答案 6 :(得分:5)

二叉树

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

例如,标记为二进制树的大小为9且高度为3,根节点的值为2.树不平衡且未排序https://en.wikipedia.org/wiki/Binary_tree

enter image description here

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

enter image description here

二进制搜索

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

二进制搜索将目标值与数组的中间元素进行比较;如果它们不相等,则目标不能说谎的一半被消除,并且继续搜索剩下的一半直到它成功或剩下的一半是空的。 https://en.wikipedia.org/wiki/Binary_search_algorithm

enter image description here

表示二进制搜索的树。这里搜索的数组是[20,30,40,50,90,100],目标值是40。

enter image description here

二进制搜索树

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

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

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

大小为9且深度为3的二叉搜索树,根位为8。叶子没有绘制。

enter image description here

最后,应用了众所周知的数据结构和算法的性能比较的伟大模式:

enter image description here

取自Algorithms (4th Edition)

的图片

答案 7 :(得分:4)

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

答案 8 :(得分:4)

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

答案 9 :(得分:3)

要检查给定的二叉树是否为二进制搜索树,这是一种替代方法。

Inorder Fashion 中的Traverse Tree(即Left Child - &gt; Parent - &gt; Right Child), 将已遍历的节点数据存储在一个临时变量中,可以说 temp ,就在存储到 temp 之前,检查当前Node的数据是否高于之前的Node。 然后只是打破它,树不是二元搜索树,否则遍历直到结束。

下面是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;
}

维护临时变量

答案 10 :(得分:1)

在二进制搜索树中,所有节点按特定顺序排列 - 根节点左侧的节点的值小于其根节点,节点右侧的所有节点的值都大于根的价值。

答案 11 :(得分:0)

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

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