空间复杂性-使用现有对象的Java对象数组
假设我正在使用Java,假设我正在尝试确定给定的二叉树是否是BST 我选择通过创建一个空数组(保存节点对象)、按顺序遍历树(沿途将节点添加到数组中)来解决问题,然后如果数组是一个完全排序的数组,则说“True” 这种方法的空间复杂度是O(1)还是O(n) 当我创建这个新数组来保存我在遍历时在树中遇到的节点对象时,我是否放入了实际的对象(因为我没有初始化任何新对象,所以应该是O(1)) 还是像存储在数组中的树节点的副本?(因此,O(n)空间。)空间复杂性-使用现有对象的Java对象数组,java,arrays,binary-search-tree,Java,Arrays,Binary Search Tree,假设我正在使用Java,假设我正在尝试确定给定的二叉树是否是BST 我选择通过创建一个空数组(保存节点对象)、按顺序遍历树(沿途将节点添加到数组中)来解决问题,然后如果数组是一个完全排序的数组,则说“True” 这种方法的空间复杂度是O(1)还是O(n) 当我创建这个新数组来保存我在遍历时在树中遇到的节点对象时,我是否放入了实际的对象(因为我没有初始化任何新对象,所以应该是O(1)) 还是像存储在数组中的树节点的副本?(因此,O(n)空间。) 请随时纠正我所做的任何错误假设。如果您使用的是另一个
请随时纠正我所做的任何错误假设。如果您使用的是另一个大小为
n
的数组,则您的空间要求至少为O(n)
,而不管您是否仅将对象的引用或副本存储到新数组中
另外,如果对遍历使用递归,那么对堆栈使用的是
O(logn)
。这种方法是O(n),不管是复制整个对象还是指向它们的指针,因为您创建了一个大小为n的数组来复制。不过,实际上,您只复制指针(实际上是Java中唯一的选项),因此不会复制节点本身占用的空间。如果用其他语言实现,这会有什么不同吗?或者不管它是用什么语言实现的,都是O(n)?如果您使用附加数组,那么它在任何语言中都将是O(n)
。