任何人都可以通过示例来解释二叉树和二进制搜索树 之间的区别吗?
答案 0 :(得分:534)
二叉树:每个节点最多有两个叶子的树
1
/ \
2 3
二进制搜索树:用于搜索。一个二叉树,其中左子项包含仅节点,其值小于父节点,右子节点仅包含值大于或等于父节点的节点。
2
/ \
1 3
答案 1 :(得分:54)
Binary Tree 是一种特殊形式的树,有两个孩子(左孩子和右孩子)。 它只是树结构中数据的表示
Binary Search Tree (BST) 是一种特殊类型的二进制树,遵循以下条件:
答案 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
例如,在左侧的树中,A有6个孩子{B,C,D,E,F,G}。它可以转换为右侧的二叉树。
二进制搜索
二进制搜索是一种技术/算法,用于查找节点链上的特定项目。 二进制搜索适用于已排序的数组。
二进制搜索将目标值与数组的中间元素进行比较;如果它们不相等,则目标不能说谎的一半被消除,并且继续搜索剩下的一半直到它成功或剩下的一半是空的。 https://en.wikipedia.org/wiki/Binary_search_algorithm
表示二进制搜索的树。这里搜索的数组是[20,30,40,50,90,100],目标值是40。
二进制搜索树
这是二叉树的实现之一。这是专门用于搜索。
二进制搜索树和B树数据结构基于二进制搜索。
二进制搜索树(BST),有时称为有序或排序二进制树,是特定类型的容器:在内存中存储“项目”(例如数字,名称等)的数据结构。 https://en.wikipedia.org/wiki/Binary_search_tree
大小为9且深度为3的二叉搜索树,根位为8。叶子没有绘制。
最后,应用了众所周知的数据结构和算法的性能比较的伟大模式:
的图片答案 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并且左子节点始终小于右子节点时,才能将树称为二叉搜索树。