判断给定的数是不是合法的BST。即当前节点值比他左子树大,比右子树小。
思路一:递归,考虑所有可能。
1. 为空是返回true
2. 用flag记录左子树返回的合法性。考虑左子树不空的时候,那么要根要比左子树的最右下角要大。
3. flag为真且右子树也为真则返回真。考虑右子树时,根要比右子树的最左小。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isValidBST(TreeNode *root) { if (!root) return true; bool flag = true; if (root -> left != NULL) { if (root -> left -> right == NULL) { if (root -> val > root -> left -> val) flag = isValidBST(root -> left); else return false; } else { TreeNode *lr = root -> left -> right; while(lr -> right) lr = lr -> right; if (root -> val > root -> left -> val && root -> val > lr -> val) flag = isValidBST(root -> left); else return false; } } if (root -> right != NULL) { if (root -> right -> left == NULL) { if (root -> val < root -> right -> val) return flag && isValidBST(root -> right); else return false; } else { TreeNode *rl = root -> right -> left; while(rl -> left) rl = rl -> left; if (root -> val < root -> right -> val && root -> val < rl -> val) return flag && isValidBST(root -> right); else return false; } } return flag; } };