Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
bool isValidBST(TreeNode* root) {//判断一个二叉树是否是平衡二叉树 //首先平衡二叉树的任一结点的左孩子应该小于父亲结点 //任一结点的右孩子应该大于父亲结点 //任一结点的左子树的最大值应该小于它 //任一结点的右子树的最小值应该大于它 if(NULL==root) return true; TreeNode* behind=root->right; while(behind && behind->left) behind=behind->left; TreeNode* ahead=root->left; while(ahead && ahead->right) ahead=ahead->right; //左右子树均不为空的情况 if(behind && ahead) { if(behind->val > root->val && ahead->val < root->val) { if(root->left->val < root->val && root->right->val > root->val) return isValidBST(root->left) && isValidBST(root->right); else return false; } else return false; } //右子树不为空的情况 if(behind) { if(behind->val > root->val && root->right->val > root->val) return isValidBST(root->right); else return false; } //左子树不为空的情况 if(ahead) { if(ahead->val < root->val && root->left->val < root->val) return isValidBST(root->left); else return false; } //左右子树均为空的情况 return true; }
leetCode(25):Validate Binary Search Tree
原文地址:http://blog.csdn.net/walker19900515/article/details/46604651