二叉树和二叉search树的区别
任何人都可以请示例解释二叉树和二叉search树之间的区别?
二叉树:每个节点最多有两片叶子的树
1 / \ 2 3
二进制search树:用于search 。 一个二进制树,其中左侧子节点只包含值小于父节点的节点,右侧子节点只包含值大于或等于父节点的节点。
2 / \ 1 3
二叉树是两个孩子(左孩子和右孩子)的一种特殊forms的树。 它只是Tree结构中数据的表示
二叉search树(BST)是二叉树的一种特殊types,它遵循以下条件:
- 左子节点比其父节点小
- 右子节点大于其父节点
二叉树由节点组成,每个节点包含一个“左”指针,一个“右”指针和一个数据元素。 “根”指针指向树中最顶端的节点。 左边和右边的指针recursion地指向两边较小的“子树”。 一个空指针表示一个没有元素的二叉树 – 空树。 正式的recursion定义是:二叉树或者是空的(用空指针表示),或者是由单个节点组成,其中左和右指针(recursion定义提前)每个指向二叉树。
二叉search树 (BST)或“有序二叉树”是一种二叉树,其中节点按顺序排列:对于每个节点,其左子树中的所有元素对于节点(<)较小,并且所有元素在其右侧的子树中大于节点(>)。
5 / \ 3 6 / \ \ 1 4 9
上面显示的树是二叉search树 – “根”节点是5,其左子树节点(1,3,4)<5,右子树节点(6,9)> 5。recursion地,每个子树也必须服从二叉search树约束:在(1,3,4)子树中,3是根,1 <3和4> 3。
注意问题中的确切用词 – “二叉search树”与“二叉树”不同。
正如大家已经解释了二叉树和二叉search树之间的区别,我只是添加如何testing给定的二叉树是二叉search树。
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); }
希望它会帮助你。 对不起,如果我转移话题,我觉得这是值得一提的这里。
二叉search树是一种特殊的二叉树,它具有以下性质:对于任意节点n,n的左子树中的每个后代节点的值都小于n的值,右子树中的每个后代节点的值是大于n的值。
二叉树表示由只能有两个子引用的节点组成的数据结构 。
另一方面, 二进制search树 ( BST )是二叉树数据结构的特殊forms,其中每个节点具有可比较的价值,较小值的子元素附着在左侧,而较大值的子元素附着在右侧。
因此,所有的BST都是二叉树,但是只有一些二叉树也可能是BST 。 通知BST是二叉树的一个子集。
所以, 二叉树比二叉search树更像是一个通用的数据结构。 而且还必须通知二叉search树是一个sorting树,而通用二叉树没有这样的规则集。
二叉树
一个不是 BST
Binary Tree
;
5 / \ / \ 9 2 / \ / \ 15 17 19 21
二叉search树(sorting树)
二叉search树也是二叉树 ;
50 / \ / \ 25 75 / \ / \ 20 30 70 80
二进制search树节点属性
同时通知BST中的任何父节点 ;
-
所有剩下的节点的值都小于父节点的值。 在上面的例子中, 所有位于左边 ( 左边的后裔 )50的值为{20,25,30}的节点都小于50。
-
所有正确的节点具有比父节点的值更大的值。 在上面的例子中, 所有位于右侧 ( 右侧后裔 )50的值为{70,75,80}的节点大于50。
二叉树节点没有这样的规则。 二叉树节点的唯一规则是有两个孩子,所以它自我解释为什么称为二进制 。
一个二叉树是一个孩子不超过两个,而二叉search树是一个树,它遵循变异属性,它说,左边的孩子应该小于根节点的键,右边的孩子应该比根大节点的密钥。
二叉search树:在二叉树上进行遍历时,可以得到插入项目的sorting值二叉树:在任何一种遍历中都没有sorting顺序
二叉树
二叉树可以是任何有2个孩子和1个父母的东西。 它可以被实现为链接列表或数组,或与您的自定义API。 一旦你开始添加更多的特定规则,它就成为更专业的树 。 最常见的实现方式是,在左侧添加较小的节点,在右侧添加较大的节点。
例如,大小为9和高度为3的带标签的二叉树,其根值节点的值为2.树不平衡且未sorting 。 https://en.wikipedia.org/wiki/Binary_tree
例如,在左边的树中,A有6个孩子{B,C,D,E,F,G}。 它可以转换成右边的二叉树。
二进制search
二进制search是用于在节点链上查找特定项目的技术/algorithm。 二进制search在sorting的数组上工作 。
二进制search将目标值与数组的中间元素进行比较; 如果它们不相等,那么目标不能说谎的一半被消灭,search继续到剩下的一半,直到成功或剩下的一半是空的。 https://en.wikipedia.org/wiki/Binary_search_algorithm
代表二进制search的树 这里search的数组是[20,30,40,50,90,100],目标值是40。
二进制search树
这是二叉树的实现之一。 这是专门为search 。
二进制search树和B树数据结构基于二分查找 。
二进制search树(BST),有时被称为有序或sorting的二叉树,是一种特殊types的容器 :将“项目”(如数字,名称等)存储在内存中的数据结构。 https://en.wikipedia.org/wiki/Binary_search_tree
一个大小为9,深度为3的二叉search树,根在8处。 叶子没有被绘制。
最后,我们使用着名的数据结构和algorithm进行性能比较:
从algorithm采取的图象(第4版)
要检查是否给定的二叉树是二叉search树这里是一个替代方法。
遍历树中按照时尚 (即左边的孩子 – >父 – >右边的孩子),存储在一个临时variables中的遍历节点数据让温度 ,就在存储到温度之前,检查当前节点的数据是否高于上一个或没有。 然后把它分解出来,树不是二叉search树,否则遍历直到结束。
下面是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; }
保持临时variables以外
在二进制search树中,所有节点都按特定顺序排列 – 根节点左侧的节点的值小于其根节点,并且节点右侧的所有节点的值都大于根。