Timeline Inorder Traversal Problem:
Inorder traversal must be strictly increasing.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode () : val (0 ) , left (nullptr ) , right (nullptr ) { } TreeNode (int x) : val (x) , left (nullptr ) , right (nullptr ) { } TreeNode (int x, TreeNode *left, TreeNode *right) : val (x) , left (left) , right (right) { } }; #include <stack> #include <climits> using std::stack;class Solution { public : bool isValidBST (TreeNode *root) { stack<TreeNode *> st; TreeNode *p = root, *left, *right; long long last = LONG_MIN; while (p || !st.empty ()) { if (p) { st.push (p); p = p->left; } else { p = st.top (); st.pop (); if (p->val <= last) { return false ; } last = p->val; p = p->right; } } return true ; } };
leetcode hot 100 rewrite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <stack> using std::stack;class Solution { public : bool isValidBST (TreeNode *root) { stack<TreeNode *> stk; TreeNode *p = root, *last = nullptr ; while (p || !stk.empty ()) { if (p) { stk.push (p); p = p->left; } else { p = stk.top (); stk.pop (); if (last && p->val <= last->val) return false ; last = p; p = p->right; } } return true ; } };