Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node ' s key.
- The right subtree of a node contains only nodes with keys greater than the node ' s key.
- Both the left and right subtrees must also is binary search trees.
Confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
Problem Solving Ideas:
(1) Empty binary tree is BST
(2) The R value of the Joghen node is greater than the maximum value of the left subtree, and is less than the right subtree minimum, and the left subtree is BST, then the tree with R root is also BST
So the code looks like this:
/** * Definition for a binary tree node. * 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 = NULL) {return true; } treenode* Leftmaxnode = Getmaxnode (root->left); treenode* Rightminnode = Getminnode (root->right); if (leftmaxnode!=null && leftmaxnode->val >= root->val) {return false; } if (Rightminnode!=null && rightminnode->val <= root->val) {return false; } return Isvalidbst (Root->left) && isvalidbst (root->right); } treenode* Getmaxnode (treenode* root) {if (root = null) {return null; } treenode* maxnode = root; treenode* Leftmaxnode = Getmaxnode (root->left); treenode* Rightmaxnode = Getmaxnode (root->right); IF (leftmaxnode!=null && leftmaxnode->val > Maxnode->val) {maxnode = Leftmaxnode; } if (Rightmaxnode!=null && rightmaxnode->val > Maxnode->val) {maxnode = Rightmaxnode; } return Maxnode; } treenode* Getminnode (treenode* root) {if (root = null) {return null; } treenode* minnode = root; treenode* Leftminnode = Getminnode (root->left); treenode* Rightminnode = Getminnode (root->right); if (leftminnode!=null && leftminnode->val < minnode->val) {minnode = Leftminnode; } if (Rightminnode!=null && rightminnode->val < minnode->val) {minnode = Rightminnode; } return Minnode; }};
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
[Leetcode] Validate Binary Search Tree