[leetcode][tree] Validate Binary Search Tree
2015-05-20 19:01
253 查看
题目:
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 be binary search trees.
利用二叉搜索树的特点:中序遍历序列是递增序列(O(n))
方法二:在遍历过程中判断(记录遍历的前一个节点)
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 be binary search trees.
利用二叉搜索树的特点:中序遍历序列是递增序列(O(n))
/** * 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(NULL == root) return true; vector<int> inOrderTraversalSeq; inOrderTraversal(root, inOrderTraversalSeq); for(int i = 1; i < inOrderTraversalSeq.size(); ++i){ if(inOrderTraversalSeq[i] <= inOrderTraversalSeq[i-1]) return false; } return true; } private: void inOrderTraversal(TreeNode* root, vector<int> &seq){ stack<TreeNode *> sta; TreeNode *p = root; while(p || !sta.empty()){ while(p){ sta.push(p); p = p->left; } p = sta.top(); sta.pop(); seq.push_back(p->val); p = p->right; } } };
方法二:在遍历过程中判断(记录遍历的前一个节点)
/** * 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: TreeNode *pre = NULL;//!!!作为全局变量 bool isValidBST(TreeNode* root) { if (NULL == root) return true; return isValidBSTCore(root); } private: bool isValidBSTCore(TreeNode* root){ if (NULL == root) return true; if (!isValidBSTCore(root->left)) return false;//遍历左子树 if (pre && root->val <= pre->val) return false;//判断当前节点是否合法(只和遍历序列的前一个节点比较) pre = root;//更新pre return isValidBSTCore(root->right);//遍历右子树 } };
相关文章推荐
- leetcode - Validate Binary Search Tree
- leetcode 98. Validate Binary Search Tree
- LeetCode 54 Validate Binary Search Tree
- [Leetcode]Validate Binary Search Tree
- LeetCode-Validate Binary Search Tree
- 【LeetCode】Validate Binary Search Tree ——合法二叉树
- leetcode - Validate Binary Search Tree
- LeetCode题解: Validate Binary Search Tree
- LeetCode "Validate Binary Search Tree"
- LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树
- leetcode || 98、Validate Binary Search Tree
- leetcode 98. Validate Binary Search Tree DFS深度优先搜索 + 两个递归函数 + 一个错误做法
- 【LeetCode】Validate Binary Search Tree 二叉查找树的判断
- [leetcode]Validate Binary Search Tree
- leetCode 98:Validate Binary Search Tree
- LeetCode:Validate Binary Search Tree
- [Leetcode]Validate Binary Search Tree
- 开始刷题leetcode day37:Validate Binary Search Tree
- leetcode Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree(判断二叉搜索树)