Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以O(logn)为单位获取二叉树的大小_Java_Data Structures_Time Complexity_Binary Tree_Big O - Fatal编程技术网

Java 以O(logn)为单位获取二叉树的大小

Java 以O(logn)为单位获取二叉树的大小,java,data-structures,time-complexity,binary-tree,big-o,Java,Data Structures,Time Complexity,Binary Tree,Big O,充分披露:这是家庭作业 我被要求返回二叉树中的秩,经过一些编码后,我让它开始工作。 但是由于我的代码没有被接受,我注意到代码应该在O(logn) 拖慢这一步的罪魁祸首是我的尺码法: public int size(Node node){ if (node != null) return (size(node.left) + 1 + size(node.right)); return 0; } 我调用它来获得所有元素的秩,这些元素的秩小于我需要查找的元素 现在,我在谷歌上搜索了一

充分披露:这是家庭作业

我被要求返回二叉树中的秩,经过一些编码后,我让它开始工作。 但是由于我的代码没有被接受,我注意到代码应该在
O(logn)

拖慢这一步的罪魁祸首是我的尺码法:

public int size(Node node){
    if (node != null) return (size(node.left) + 1 + size(node.right));
    return 0;
}
我调用它来获得所有元素的秩,这些元素的秩小于我需要查找的元素

现在,我在谷歌上搜索了一下,但显然不可能在logn时间内获得BT的大小


那么我需要怎么做呢?

对于一个只存储子节点的简单二叉树,不可能在O(log(n))时间内获得大小,因为有n个节点,您必须对每个节点进行计数。然而,为什么要限制自己只生孩子呢?与许多数据结构一样,可以使用节点存储大小:

类节点{
公共节点左;
公共节点权;
公共价值观;
private int size;//将其初始化为1
}
然后,在插入节点时,增加遇到的每个节点的大小:

public void insert(int值){
//增大尺寸
这个.size++;
if(值<此值){
//显然,还要检查null,并根据需要插入
此。左。插入(值);
}否则{
此。右。插入(值);
}
}

现在,您可以在O(1)时间内获得大小,因为每个节点都有大小。

对于只存储子节点的简单二叉树,不可能在O(log(n))时间内获得大小,因为有n个节点,您必须对每个节点进行计数。然而,为什么要限制自己只生孩子呢?与许多数据结构一样,可以使用节点存储大小:

类节点{
公共节点左;
公共节点权;
公共价值观;
private int size;//将其初始化为1
}
然后,在插入节点时,增加遇到的每个节点的大小:

public void insert(int值){
//增大尺寸
这个.size++;
if(值<此值){
//显然,还要检查null,并根据需要插入
此。左。插入(值);
}否则{
此。右。插入(值);
}
}

现在,您可以在O(1)时间内获得大小,因为每个节点都有大小。

您怎么可能以比项目更少的步骤计算某个项目?这就像说“以50步1的增量从1数到100”。你不能用普通的BST来做。你想要的谷歌单词是“顺序统计树”嗯,我在讲座中从未听过这个词。甚至这个练习也提到了二叉树。但是谢谢,我会调查的!这是一个普通的二叉树吗?或者是否存在一些您未共享的节点排序,例如,它是BST?当你交替地说“大小”和“等级”时,你到底想测量什么?我假设这是一个BST,左=小,右=大。我指的是树叶的数量。排名是我。E如果我们有叶1、2和3,叶2的秩将是1(索引为0),你怎么可能用更少的步骤来计算项目呢?这就像说“以50步1的增量从1数到100”。你不能用普通的BST来做。你想要的谷歌单词是“顺序统计树”嗯,我在讲座中从未听过这个词。甚至这个练习也提到了二叉树。但是谢谢,我会调查的!这是一个普通的二叉树吗?或者是否存在一些您未共享的节点排序,例如,它是BST?当你交替地说“大小”和“等级”时,你到底想测量什么?我假设这是一个BST,左=小,右=大。我指的是树叶的数量。排名是我。E如果我们有叶1,2和3,叶2的等级将是1(索引为0)哦,我一定要试试这个!我会让你知道你做了一些假设。首先,在你的例子中,二叉树是被排序的——他从来没有说过是这样。其次,插入总是发生在根节点上。例如,如果插入发生在除根节点以外的任何节点上,则大小将变大,因为父节点不会更新。好的,这是正确的方法。他们希望我们扩充数据结构。我现在需要找到一种方法来实现它,谢谢,我一定会尝试的!我会让你知道你做了一些假设。首先,在你的例子中,二叉树是被排序的——他从来没有说过是这样。其次,插入总是发生在根节点上。例如,如果插入发生在除根节点以外的任何节点上,则大小将变大,因为父节点不会更新。好的,这是正确的方法。他们希望我们扩充数据结构。我现在需要找到一种方法来实现这一点,谢谢