class Solution {
public :
bool dfs ( TreeNode* root, long long minv, long long maxv) {
if ( ! root) return true ;
if ( root- > val < minv || root- > val > maxv) return false ;
return dfs ( root- > left, minv, root- > val- 1 ll) && dfs ( root- > right, root- > val+ 1 ll, maxv) ;
}
bool isValidBST ( TreeNode* root) {
return dfs ( root, INT_MIN, INT_MAX) ;
}
} ;
class Solution {
public :
bool dfs ( TreeNode* l, TreeNode* r) {
if ( ! l || ! r) return ! l && ! r;
return l- > val== r- > val && dfs ( l- > left, r- > right) && dfs ( l- > right, r- > left) ;
}
bool isSymmetric ( TreeNode* root) {
if ( ! root) return true ;
return dfs ( root- > left, root- > right) ;
}
} ;
class Solution {
public :
vector< int > inorderTraversal ( TreeNode* root) {
vector< int > ans;
stack< TreeNode* > stk;
TreeNode* p = root;