有人能用一个例子来解释二叉树和二叉搜索树的区别吗?
t9aqgxwy1#
二叉树是有两个子树(左子树和右子树)的一种特殊形式。它只是简单地用树结构表示数据二叉搜索树(bst)是一种特殊类型的二叉树,符合以下条件:左侧子节点小于其父节点右子节点大于其父节点
shyt4zoc2#
在二叉搜索树中,所有节点按特定顺序排列—根节点左侧的节点的值小于其根节点的值,而节点右侧的所有节点的值大于根节点的值。
xqnpmsa83#
当且仅当任一节点的子节点的最大数目为2时,树才能被称为二叉树。当且仅当任意节点的最大子节点数为2且左子节点总是小于右子节点时,树才可以称为二叉搜索树。
3b6akqbq4#
二叉树二叉树可以是任何有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的二叉搜索树。叶子没有画出来。最后是用于比较已知数据结构和算法性能的最佳模式:图像取自算法(第4版)
kyxcudwk5#
二叉树由节点组成,每个节点包含一个“左”指针、“右”指针和一个数据元素。“根”指针指向树中最顶层的节点。左指针和右指针递归地指向两边较小的“子树”。空指针表示没有元素的二叉树——空树。正式的递归定义是:二叉树要么是空的(由空指针表示),要么是由单个节点组成的,其中左指针和右指针(前面的递归定义)每个指向一个二叉树。二叉搜索树(bst)或“有序二叉树”是一种按顺序排列节点的二叉树:对于每个节点,其左子树中的所有元素小于节点(<),其右子树中的所有元素大于节点(>)。
5 / \ 3 6 / \ \ 1 4 9
上面显示的树是一个二叉搜索树,“根”节点是一个5,它的左子树节点(1,3,4)小于5,右子树节点(6,9)大于5。递归地,每个子树也必须服从二叉搜索树约束:在(1,3,4)子树中,3是根,1<3和4>3。注意问题的确切措辞——“二叉搜索树”不同于“二叉树”。
nnvyjq4y6#
二叉搜索树是一种特殊的二叉树,它具有如下性质:对于任意节点n,n的左子树中的每个子节点的值都小于n的值,右子树中的每个子节点的值都大于n的值。
35g0bw717#
二叉树代表一种数据结构,它由只能有两个子引用的节点组成。另一方面,二叉搜索树(binarysearchtree,bst)是一种特殊形式的二叉树数据结构,其中每个节点都有一个可比较的值,较小值的子节点依附在左边,较大值的子节点依附在右边。因此,所有的bst都是二叉树,但是只有一些二叉树也可能是bst。通知bst是二叉树的子集。因此,二叉树比二叉搜索树更像是一种通用的数据结构。另外,您还必须通知二叉搜索树是一个排序树,而通用二叉树没有这样的规则集。
一 Binary Tree 这不是一个 BST ;
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。二叉树节点没有这样的规则。二叉树节点的唯一规则是有两个子节点,所以它自己解释了为什么称为二进制。
p8ekf7hl8#
二叉搜索树:在二叉树上进行有序遍历时,可以得到插入项的排序值二叉树:在任何类型的遍历中都找不到排序顺序
9avjhtql9#
要检查给定的二叉树是否是二叉搜索树,这里有另一种方法。按顺序遍历树(即左子节点-->父节点-->右子节点),将遍历的节点数据存储在临时变量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; }
保持外部温度变量
gz5pxeao10#
二叉树是一棵树,它的子树永远不会超过两个。二叉搜索树遵循一个不变量,即左子节点的值应小于根节点的键,而右子节点的值应大于根节点的键。
ghg1uchk11#
正如上面每个人都解释了二叉树和二叉搜索树之间的区别,我只是添加了如何测试给定的二叉树是否是二叉搜索树。
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); }
希望对你有帮助。抱歉,如果我从这个主题转移,因为我觉得这是值得一提的。
igsr9ssn12#
二叉树:每个节点最多有两片叶子的树
1 / \ 2 3
二叉搜索树:用于搜索。一种二叉树,其中左子节点只包含值小于父节点的节点,右子节点只包含值大于或等于父节点的节点。
2 / \ 1 3
12条答案
按热度按时间t9aqgxwy1#
二叉树是有两个子树(左子树和右子树)的一种特殊形式。它只是简单地用树结构表示数据
二叉搜索树(bst)是一种特殊类型的二叉树,符合以下条件:
左侧子节点小于其父节点
右子节点大于其父节点
shyt4zoc2#
在二叉搜索树中,所有节点按特定顺序排列—根节点左侧的节点的值小于其根节点的值,而节点右侧的所有节点的值大于根节点的值。
xqnpmsa83#
当且仅当任一节点的子节点的最大数目为2时,树才能被称为二叉树。
当且仅当任意节点的最大子节点数为2且左子节点总是小于右子节点时,树才可以称为二叉搜索树。
3b6akqbq4#
二叉树
二叉树可以是任何有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的二叉搜索树。叶子没有画出来。
最后是用于比较已知数据结构和算法性能的最佳模式:
图像取自算法(第4版)
kyxcudwk5#
二叉树由节点组成,每个节点包含一个“左”指针、“右”指针和一个数据元素。“根”指针指向树中最顶层的节点。左指针和右指针递归地指向两边较小的“子树”。空指针表示没有元素的二叉树——空树。正式的递归定义是:二叉树要么是空的(由空指针表示),要么是由单个节点组成的,其中左指针和右指针(前面的递归定义)每个指向一个二叉树。
二叉搜索树(bst)或“有序二叉树”是一种按顺序排列节点的二叉树:对于每个节点,其左子树中的所有元素小于节点(<),其右子树中的所有元素大于节点(>)。
上面显示的树是一个二叉搜索树,“根”节点是一个5,它的左子树节点(1,3,4)小于5,右子树节点(6,9)大于5。递归地,每个子树也必须服从二叉搜索树约束:在(1,3,4)子树中,3是根,1<3和4>3。
注意问题的确切措辞——“二叉搜索树”不同于“二叉树”。
nnvyjq4y6#
二叉搜索树是一种特殊的二叉树,它具有如下性质:对于任意节点n,n的左子树中的每个子节点的值都小于n的值,右子树中的每个子节点的值都大于n的值。
35g0bw717#
二叉树代表一种数据结构,它由只能有两个子引用的节点组成。
另一方面,二叉搜索树(binarysearchtree,bst)是一种特殊形式的二叉树数据结构,其中每个节点都有一个可比较的值,较小值的子节点依附在左边,较大值的子节点依附在右边。
因此,所有的bst都是二叉树,但是只有一些二叉树也可能是bst。通知bst是二叉树的子集。
因此,二叉树比二叉搜索树更像是一种通用的数据结构。另外,您还必须通知二叉搜索树是一个排序树,而通用二叉树没有这样的规则集。
二叉树
一
Binary Tree
这不是一个BST
;二叉搜索树(排序树)
二叉搜索树,也是二叉树;
二叉搜索树节点属性
同时通知bst中的任何父节点;
所有左侧节点的值都小于父节点的值。在上面的示例中,值为{20、25、30}的节点都位于50的左侧(左后代),它们小于50。
所有正确的节点的值都大于父节点的值。在上面的示例中,值为{70、75、80}的节点都位于50的右侧(右后代),大于50。
二叉树节点没有这样的规则。二叉树节点的唯一规则是有两个子节点,所以它自己解释了为什么称为二进制。
p8ekf7hl8#
二叉搜索树:在二叉树上进行有序遍历时,可以得到插入项的排序值
二叉树:在任何类型的遍历中都找不到排序顺序
9avjhtql9#
要检查给定的二叉树是否是二叉搜索树,这里有另一种方法。
按顺序遍历树(即左子节点-->父节点-->右子节点),将遍历的节点数据存储在临时变量temp中,在存储到temp之前,检查当前节点的数据是否高于上一个节点的数据。然后就把它拆开,树不是二叉搜索树否则遍历到底。
下面是一个java示例:
保持外部温度变量
gz5pxeao10#
二叉树是一棵树,它的子树永远不会超过两个。二叉搜索树遵循一个不变量,即左子节点的值应小于根节点的键,而右子节点的值应大于根节点的键。
ghg1uchk11#
正如上面每个人都解释了二叉树和二叉搜索树之间的区别,我只是添加了如何测试给定的二叉树是否是二叉搜索树。
希望对你有帮助。抱歉,如果我从这个主题转移,因为我觉得这是值得一提的。
igsr9ssn12#
二叉树:每个节点最多有两片叶子的树
二叉搜索树:用于搜索。一种二叉树,其中左子节点只包含值小于父节点的节点,右子节点只包含值大于或等于父节点的节点。