Algorithm 确定元素位于左子树还是右子树的最快方法

Algorithm 确定元素位于左子树还是右子树的最快方法,algorithm,binary-tree,Algorithm,Binary Tree,如果二叉树的构造如下 根是1 元素n的左子元素是2*n 元素n的右子元素是(2*n)+1 如果我得到一个数字n,最快的方法是什么来确定它是在根的左子树还是右子树中?左子树是否有一些易于确定的数学性质 注意:这不是一个家庭作业问题,尽管这是我试图解决的一个更大的算法问题的一部分。考虑二进制数字。每个子项都将是父项编号,并根据其是左还是右附加0或1 这意味着根左边的所有内容都将以二进制形式从10开始,右边的所有内容都将以二进制形式从11开始 这意味着您应该能够通过使用一些移位操作和一些比较来确定

如果二叉树的构造如下

  • 根是1
  • 元素n的左子元素是2*n
  • 元素n的右子元素是(2*n)+1
如果我得到一个数字n,最快的方法是什么来确定它是在根的左子树还是右子树中?左子树是否有一些易于确定的数学性质


注意:这不是一个家庭作业问题,尽管这是我试图解决的一个更大的算法问题的一部分。

考虑二进制数字。每个子项都将是父项编号,并根据其是左还是右附加0或1

这意味着根左边的所有内容都将以二进制形式从10开始,右边的所有内容都将以二进制形式从11开始

这意味着您应该能够通过使用一些移位操作和一些比较来确定它位于哪一侧

我应该注意到,我不知道这是否是最有效的方法,但它很容易确定左子树的数学属性

正如其他人所指出的,0或1附加的结果意味着每个数字编码通过子树的路径。第一个1表示树的根,从那时起,0表示在该点取左分支,1表示取右分支

因此二进制1001101表示左、左、右、右、左、右

这样做的一个明显结果是,二进制数字的数量将决定该数字在树中的深度。因此,1是最高(第一)级别。10名为第二级(作出一项选择)。我的示例1001101将处于第7级(做出六个选择)。我应该注意的是,我不熟悉二叉树的术语,所以不确定根通常是第一级还是第零级,这就是为什么我对所做选择的数量也很明确


如果还没有观察到,最后一个观察结果是,数字也将被分配从上到下、从左到右计数。第一级是1。下一个是2在左边,3在右边。下面的级别是4、5、6、7,然后是8、9、10、11、12、13、14、15,依此类推。这在数学上没有任何用处,但如果你试图将其可视化,它可能会很有帮助。

考虑二进制数字。每个子项都将是父项编号,并根据其是左还是右附加0或1

这意味着根左边的所有内容都将以二进制形式从10开始,右边的所有内容都将以二进制形式从11开始

这意味着您应该能够通过使用一些移位操作和一些比较来确定它位于哪一侧

我应该注意到,我不知道这是否是最有效的方法,但它很容易确定左子树的数学属性

正如其他人所指出的,0或1附加的结果意味着每个数字编码通过子树的路径。第一个1表示树的根,从那时起,0表示在该点取左分支,1表示取右分支

因此二进制1001101表示左、左、右、右、左、右

这样做的一个明显结果是,二进制数字的数量将决定该数字在树中的深度。因此,1是最高(第一)级别。10名为第二级(作出一项选择)。我的示例1001101将处于第7级(做出六个选择)。我应该注意的是,我不熟悉二叉树的术语,所以不确定根通常是第一级还是第零级,这就是为什么我对所做选择的数量也很明确


如果还没有观察到,最后一个观察结果是,数字也将被分配从上到下、从左到右计数。第一级是1。下一个是2在左边,3在右边。下面的级别是4、5、6、7,然后是8、9、10、11、12、13、14、15,依此类推。这在数学上并没有任何用处,但如果你试图将其可视化,可能会很有帮助。

根据Chris的观察,有一条非常简单的规则:让x成为你要寻找的节点。设我们是x的二进制表示。然后,从最高有效位开始的第一个数字后面的S中的数字告诉您从根开始的路径:0表示向左,1表示向右

示例:x=2710=110112,所以我们需要向右、向左、向右、向右才能到达那里(前面的1被忽略)


这是正确的原因是,如果你向右走,你乘以2(二进制左移乘以1),然后加上1,所以你实际上是在加上1。相反,如果你向左走,你会附加一个0。

根据Chris的观察,有一个非常简单的规则:让x成为你要寻找的节点。设我们是x的二进制表示。然后,从最高有效位开始的第一个数字后面的S中的数字告诉您从根开始的路径:0表示向左,1表示向右

示例:x=2710=110112,所以我们需要向右、向左、向右、向右才能到达那里(前面的1被忽略)


这是正确的原因是,如果你向右走,你乘以2(二进制左移乘以1),然后加上1,所以你实际上是在加上1。相反,如果你向左走,你会附加一个0。

好吧,左边的元素是
2n
所以,我认为它不满足
BST
排序属性,但它会满足
min heap
@AlejandroLucena我认为实现应该是
索引n
而不是
元素n
,因此,左派和右派儿童都不知道价值观。应该与OP一起检查。好的,左边的元素是
2n
,因此,我认为它不满足
BST
排序属性,但它将满足
min heap
@AlejandroLucena我相信实现应该是
索引n
而不是
元素n