这是一张Binary Tree图表。我无法理解图表的创建方式。你有5个在顶部,但你如何决定接下来的数字和订单是什么?有人可以一步一步地指导我吗?
答案 0 :(得分:3)
听起来你对该链接的图表特别困惑。该图似乎有错误。
正如其他人所说,有多种有效的安排,但对有序二叉树的要求是每个节点的左子树仅包含较小的元素,而右子树仅包含较大的元素。
在您问题中提供的链接的图表中,这违反了6>元素6属于右子树5,它似乎是作者的一个简单错误。
答案 1 :(得分:1)
Ofcourse,
嗯,你说这是二叉树。所以这是算法: 插入新号码时,如果号码较小,则向左移动 如果它更大,它就是正确的。您应该检查此applet 生成二叉树以了解它是如何工作的
答案 2 :(得分:0)
数字的具体安排不是规范的(即存在其他有效安排)。唯一的要求是每个节点的左子树只包含较小的节点,而右子树只包含较大的节点。
您对特定排列的了解取决于用于填充它的算法以及插入值的顺序。这在“平衡树”部分的文章中有部分解释。插入时,需要保持树的平衡。您重新平衡的频率以及重新平衡的方式是数百万页教科书,研究论文和代码行的主题。
简而言之,你的问题的答案是,“这取决于。”
对于天真的实现,它不一定产生平衡的树,每个插入只是走树,如果数量小于当前访问的节点则向左移动,或者如果它更大则向右移动(忽略相等的值,你' d需要确保不发生或决定处理它们的政策。当你到达一个死胡同(即一个空的左指针或右指针)时,在那里插入一个带有插入值的新节点。
补充工具栏:值得注意的是,由于其简单性,这种天真的算法在极少数情况下可以满足您的需求。您可以通过在插入之前随机混洗输入数据来避免不平衡树。但是,在大多数情况下,您最好不要使用二叉树。哈希表几乎总是可取的。