#recursion #queue #space-complexity
#рекурсия #очередь #пространственная сложность
Вопрос:
пространственная сложность = глубина * потребляемая память. У меня есть журнал глубины (n), поэтому в пространстве сложность равна O (NlogN). В одном блоге medium написано O (N). Поэтому, что правильно?
class Solution {
public boolean isValidBST(TreeNode root) {
Queue<TreeNode> nodes = new LinkedList<>();
depth(root,nodes);
while(nodes.size()>1){
TreeNode node1= nodes.remove();
TreeNode node2= nodes.element();
if(node2.val<=node1.val){
return false;
}
}
return true;
}
private void depth(TreeNode root,Queue<TreeNode> nodes){
if(root==null){
return;
}
depth(root.left,nodes);
nodes.add(root);
depth(root.right,nodes);
}
}
Комментарии:
1. Это O (N), у вас n узлов, и сохраните их все в LinkedList, поэтому он занимает N места. И когда дерево растет, ваш LinkedList растет линейно.
2. Это O (N), потому что очередь передается по ссылке, поэтому она не сохраняет очередь в стеке для каждой рекурсии. Спасибо