标签:
题目:
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
代码:
/** * 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) return true; stack<TreeNode *> sta; vector<int> traversal; TreeNode *p = root; while ( !sta.empty() || p ) { if (p){ sta.push(p); p = p->left; } else{ p = sta.top(); sta.pop(); if ( !traversal.empty() && traversal[traversal.size()-1]>=p->val ) return false; traversal.push_back(p->val); p = p->right; } } return true; } };
tips:
中序遍历BST;并保留每次访问的元素;如果中序遍历的前一个元素不小于后一个元素,则返回false;全部遍历过后无问题,则返回true。
题目中有一个test case是:[-2147483648],即INT_MIN。由于有这个非常极端的case存在,之前那种设一个pre = INT_MIN的办法就行不通了,暂时老老实实用一个vector来代替。
【Validate Binary Search Tree】cpp
标签:
原文地址:http://www.cnblogs.com/xbf9xbf/p/4508313.html