回答
据我们存储具有在右子树更大的价值和更小的值的节点对于任何节点的左子树,节点在Bottom Right
角将具有最大值并且节点在Bottom Left
角将具有最小值
因此,现在您需要找到节点。 Complete and Full BST
也存储在数组中,因此索引均匀地分布在点上ES。所以在这里我们需要移动Top to Bottom
和Left to Right
如果存在n
节点,则将索引分配给从1
开始到n
的节点。
因此,如果我们写定树索引,
1
/ \
2 3
/ \ / \
4 5 6 7
/\ ^^^-------------Largest value
8 9
Smallest value----^^^
所以这里有8
指数将具有最小和值将具有最大值为7
索引节点的节点。
所以现在的问题是如何找到它。因此,考虑到我们有一个级别为l
的树,那么最大值的索引将是2^level - 1
,最小值将会是第2^level
个索引。但是,如果total_nodes = 2^level-1
,我们在这里获得的最大值的索引可能会给我们一个错误的答案。所以我们需要通过考虑total_nodes = n+1
以不同的方式计算level
。
int level = (int)(Math.ceil (Math.log(n)/Math.log(2))); //For index of smallest value;
int smallest_index = (int) Math.pow (2,level);
level = (int)(Math.ceil (Math.log(n+1)/Math.log(2))); //For index of largest value;
int largest_index = (int) Math.pow (2,level) - 1;
Sanket的答案基本上是正确的,但它最终的说法让我感到不舒服。谁在说两个四舍五入的(!)日志的四舍五入(!)比率不会圆整到只是略高于预期的整数?然后ceil
将一直向上。也许它有效,但它基本上是偶然的,而不是设计。
它也可以“干净地”表示,而不需要考虑/担心这种事情,就按位算术而言。一切都保持一个整数,因此更容易推理。
最低项目的索引是在n
的最高功率2中出现的,所以最高设置位。在Java中,甚至对于一个功能:Integer.highestOneBit
,或者我们可以把它写:
int highestOneBit(int x) {
x |= x >> 16;
x |= x >> 8;
x |= x >> 4;
x |= x >> 2;
x |= x >> 1;
return x^(x >>> 1);
}
现在我们必须
indexOfLowest = highestOneBit(n);
indexOfHighest = highestOneBit(n + 1) - 1;
这还是假设为基础1指数(留下指数0未使用)你可以简单地将它全部抵消1,使它索引0。
这是获得关卡的完美方式,因为对于较大的值,Math.ceil()或Math.log()可能会产生不一致的结果,所以最好使用按位运算来保证正确的答案。 –
- 1. 完整的二叉搜索树和AVL树的区别?
- 2. 在一个完整的满二叉树
- 3. 完整二叉树的高度
- 4. 最大的堆和二叉树
- 5. 二叉搜索树基于节点数量的最大和最小高度
- 6. 最大产品在完整的二分图中完美匹配
- 7. Fortran:最大和最小的整数
- 8. 二叉搜索树中K个最小元素的总和
- 9. Java搜索整个树的最小值
- 10. 标准ml中的最大整数和最小整数
- 11. 选择最大值列的完整行
- 12. 窗体大小调整和最大化
- 13. 需要在java中显示流程完整的二叉树
- 14. 添加到一个完整的二叉树使用递归C
- 15. 如何在Java中将节点插入完整的二叉树?
- 16. 这是一个完整的二叉树吗?
- 17. 使用数组构建一个完整的二叉树
- 18. 不完整的二叉树作为数组
- 19. 如何在Java中创建完整的二叉树
- 20. 如何创建具有空节点的完整二叉树
- 21. 最完整的C++ facebook库
- 22. 二叉搜索树上的Javascript大小
- 23. 找到最小递归的二叉树
- 24. 大小为1的二叉树的最大深度
- 25. 查找二叉树的最大深度
- 26. 二叉树中最大的数字
- 27. AVL树的最大和最小节点
- 28. wpf调整大小完成
- 29. 在二叉树中返回最小值
- 30. 功能找到最深的二叉搜索树总和
考虑到二叉搜索树是一个排序树,其中每个左节点比它的父节点小,并且每个右节点都大于它的父节点,所以可以肯定地说最小值是最左边的值和最大值是最右边的。 –