Verify Preorder Array for Binary Search Tree
给一个int的array, 问你这个array是不是一个bst的preorder.
用stack做preorder遍历”
如果当前元素大于stack里的元素, 证明我们在遍历一个node的右节点, 这时,因为是preorder, 说明左节点已经遍历过了, 所以我们要把stack中所有小于当前元素的节点pop出来,并且用low记录最后的一个. 如果当前元素比low小, 证明循序有错误, 因为low是左子树中最小的元素.
然后每次把当前node放入stack, 最后stack中有元素也不影响判断是不是preorder
public boolean verifyPreorder(int[] preorder) { int low = Integer.MIN_VALUE; Stack<Integer> st = new Stack<>(); for(int p : preorder){ if (p < low) return false; while (!st.empty()&& st.peek() < p) low = st.pop(); st.push(p); } return true; }
Leave A Comment