Data structures 理解二叉搜索树的构造
我很难理解二进制搜索树是如何构建的。它们是否需要对初始数据进行排序才能找到最顶端的根?二叉搜索树的形状取决于两个因素:Data structures 理解二叉搜索树的构造,data-structures,binary-search-tree,Data Structures,Binary Search Tree,我很难理解二进制搜索树是如何构建的。它们是否需要对初始数据进行排序才能找到最顶端的根?二叉搜索树的形状取决于两个因素: 插入元素的顺序,以及 树在插入期间执行的平衡操作(如果有) 如果您有一个没有再平衡逻辑的纯二叉搜索树,那么元素的插入顺序将对树的形状产生很大的影响。例如,取值1、2、3、4、5、6、7。如果按顺序4、2、6、1、3、5、7插入它们,将得到以下树: 4 / \ 2 6 / \ / \ 1 3 5 7 1
4
/ \
2 6
/ \ / \
1 3 5 7
1
\
2
\
3
\
4
\
5
\
6
\
7
原因是我们经过了以下一系列的树:
4
4
/
2
4
/ \
2 6
4
/ \
2 6
/
1
4
/ \
2 6
/ \
1 3
4
/ \
2 6
/ \ /
1 3 5
4
/ \
2 6
/ \ / \
1 3 5 7
另一方面,如果按顺序1、2、3、4、5、6、7插入值,则得到以下树:
4
/ \
2 6
/ \ / \
1 3 5 7
1
\
2
\
3
\
4
\
5
\
6
\
7
有趣的是,将元素按排序顺序插入BST是对树所做的最糟糕的事情之一,因为它使树成为线性结构。最好选择要插入的元素的随机排列,或者(如果它们都事先已知)对它们进行排序,并对排序后的序列使用以下递归算法:
- 如果没有元素,就完成了
- 否则:
- 将中间带插入BST
- 递归地将元素的前半部分插入BST
- 递归地将元素的后半部分插入BST
希望这有帮助 “在BST中插入中值。”所以,为了得到中值,我必须先对线性数据进行排序,比如5,3,6,2,4,1必须重新排序为1,2,3,4,5,6,然后4将是根?@GeorgeL-我不确定我是否理解你的评论。您能澄清一下吗?很抱歉,没有意识到按enter键会提交评论。@GeorgeL-如果您想要一个最佳的BST,您需要提前对数据进行排序,或者使用一种算法,该算法的工作量至少与对数据进行排序相同。@GeorgeL-也就是说,BST的根(除非BST使用平衡算法)始终是插入的第一个元素。