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?
解法1:
吃透了bst的性质就好做了:
第一个数字是root,之后找出所有比他大的和所有比他小的范围。
对large 和small分别做递归。
要注意如果left > right return true
C++
Java
解法2: Stack O(N) Time + O(N) Space
基本的思想是,用一个stack来维护当前的树,如果一个数字比栈顶的数字小,那么就认为是当前数的左子树,而如果比栈顶的大,那么说明是其中一个node的右字树,那么就需要把栈顶弹出,同时需要更新当前的low,之后所有的点都必须要比这个low大,如果不符合这一点就不是BST。
|
|
解法3: Follow Up Stack O(N) Time + O(1) Space
为了节省空间,就直接用preorder这个数组来当成stack就可以了。
|
|