Verify Preorder Sequence in Binary Search Tree
来源:互联网 发布:炫光制作软件 编辑:程序博客网 时间:2024/06/05 00:17
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.
You may assume each number in the sequence is unique.
Follow up:
Could you do it using only constant space complexity?
也就是说,当前node的值必须比左边的要大,那么我们就维持一个stack,来保存visit当前点的左边最小值,如果后面visit出来的点值比左边还小,那就坏了return false。
说白了,就是为了验证这个树形结构是否是正确的,我们为了维护一个当前点的最小值,那么就要用stack来保存。
算法就是:只要遇见小于当前stack.peek()的点的值,就push进去,如果遇见比peek大的值,那么证明我们遇见了右边的点,那么pop stack直到peek的值比当前值大,同时我们需要更新最小值为pop的值,也就是随着我的点右移,我的最小值也应该随着往右移动,这样就模拟验证了整个tree是不是valid。注意int array也可以for循环,直接for int p就行。不需要用Integer。
public class Solution { public boolean verifyPreorder(int[] preorder) { if(preorder == null) return false; int min = Integer.MIN_VALUE; Stack<Integer> stack = new Stack<Integer>(); for(int p: preorder){ if(p < min){ return false; } while(!stack.isEmpty() && stack.peek() < p){ min = stack.pop(); } stack.push(p); } return true; }}
follow up,如果需要用constant space,那就需要把最小值直接修改记录在preorder的array里面,这样就不用stack来记录历史信息。这个很巧妙。这个思想就是把array当stack用,然后把后面遇见的a,放到前面去,然后low的值取完了之后,历史信息就没有用了,所以可以把后面的值放到前面去。
public class Solution { public boolean verifyPreorder(int[] preorder) { if(preorder == null) return false; int min = Integer.MIN_VALUE; int i=-1; for(int a: preorder){ if(a<min) return false; while(i>=0 && a > preorder[i]){ min = preorder[i--]; } preorder[++i] = a; } return true; }}
- Verify Preorder Sequence in Binary Search Tree
- Verify Preorder Sequence in Binary Search Tree
- [Leetcode]Verify Preorder Sequence in Binary Search Tree
- LeetCode 题解(264) : Verify Preorder Sequence in Binary Search Tree:
- *LeetCode-Verify Preorder Sequence in Binary Search Tree
- [LeetCode255]Verify Preorder Sequence in Binary Search Tree
- LeetCode 255. Verify Preorder Sequence in Binary Search Tree
- 255. Verify Preorder Sequence in Binary Search Tree
- Leetcode 255. Verify Preorder Sequence in Binary Search Tree
- 255. Verify Preorder Sequence in Binary Search Tree
- Leetcode 255 Verify Preorder Sequence in Binary Search Tree
- [leetcode 255] Verify Preorder Sequence in Binary Search Tree ---先序遍历验证二叉搜索树
- [leetcode] 255. Verify Preorder Sequence in Binary Search Tree 解题报告
- Leetcode 255. Verify Preorder Sequence in Binary Search Tree (Medium) (cpp)
- [Leetcode] 255. Verify Preorder Sequence in Binary Search Tree 解题报告
- LeetCode 255. Verify Preorder Sequence in Binary Search Tree(检查二叉搜索树的前序遍历)
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- 48. Rotate Image
- (POJ 2528)Mayor's posters 线段树 + 离散化
- 通过终端shell来操作MySQL数据库(MAMP下)
- 【暂无】 二叉树 二叉树的计数(count-tree.cpp)
- Java学习总结第十四天Java类的继承
- Verify Preorder Sequence in Binary Search Tree
- 【二叉树】 堆应用:合并果子
- SHA1算法原理
- ARM嵌入式系统
- AOP.jsp+MVC.jsp
- js中的in操作符
- HDU5536 Chip Factory 被外表欺骗的水题 国庆咸鱼
- 计蒜客 青云的机房组网方案
- Qt 进度条填充效果