General
155 Min Stack
Use 2 stacks
// |1|
// |3| |1|
// |2| |2|
// stack minStack
public class MinStack{
private Stack<Integer> stack;
private Stack<Integer> minStack;
public MinStack() {
this.stack = new Stack<Integer>();
this.minStack = new Stack<Integer>();
}
void push(int number) {
stack.push(number);
if (minStack.empty()) minStack.push(number);
else{
if (number <= minStack.peek()) minStack.push(number);
}
}
int pop() {
if (stack.peek().equals(minStack.peek())){ // compare using equals()
minStack.pop();
}
return stack.pop();
}
int min() {
return minStack.peek();
}
Binary Tree node increasing order
curQueue 儲存當前node
nxtQueue 儲存下一層node
public static List<List<Integer>>binaryTreeDepthOrder(BinaryTreeNode<Integer> tree){ Queue<BinaryTreeNode<Integer>> curLevel = new LinkedList<>(); List<List<Integer>> result = new ArrayList<>(); curLevel.add(tree); while(!curLevel.isEmpty()){ List<Integer> levelVal = new ArrayList<>(); Queue<BinaryTreeNode<Integer>> nextLevel = new LinkedList<>(); while(!curLevel.isEmpty()){ BinaryTreeNode<Integer> node = curLevel.poll(); // null check first, a null can still add into a Queue if (node != null){ levelVal.add(node.data); nextLevel.add(node.left); nextLevel.add(node.right); } } if (!levelVal.isEmpty()) { result.add(levelVal); } curLevel = nextLevel; } return result;
Last updated
Was this helpful?