[LeetCode-12]Validate Binary Search Tree
2014-05-20 05:42
211 查看
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.
confused what
read more on how binary tree is serialized on OJ.
Analysis:
The strigh forwared idea is using the Tree Traversal. Consider the Binary Search Tree with InOrder traversal. The result
should be a sequence in ascending order, otherwise, it's not a binary search tree.
the other solution, we could set the bounary min and max value for each sub-tree,
the root has no restriction
for every level tree, the left child max value
< root, the right child min value > root
c++
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.
confused what
"{1,#,2,3}"means? >
read more on how binary tree is serialized on OJ.
Analysis:
The strigh forwared idea is using the Tree Traversal. Consider the Binary Search Tree with InOrder traversal. The result
should be a sequence in ascending order, otherwise, it's not a binary search tree.
ArrayList<Integer> result; public boolean isValidBST(TreeNode root) { result = new ArrayList<Integer>(); if(root == null) return true; inorder(root); for(int i=0;i<result.size()-1;i++){ if(result.get(i)>=result.get(i+1)) return false; } return true; } public void inorder(TreeNode root){ if(root!=null){ inorder(root.left); result.add(root.val); inorder(root.right); } }
the other solution, we could set the bounary min and max value for each sub-tree,
the root has no restriction
for every level tree, the left child max value
< root, the right child min value > root
public boolean isValidBST(TreeNode root) { return judgeBST(root, Integer.MAX_VALUE, Integer.MIN_VALUE); } public boolean judgeBST(TreeNode root, int max, int min){ if(root == null) return true; if(root.val<max && root.val>min && judgeBST(root.left, root.val, min) && judgeBST(root.right, max, root.val)){ return true; }else { return false; } }
c++
bool judgeValidBST(TreeNode *root, int nMin, int nMax) { if(root == NULL) return true; if(root->val <=nMax && root->val >=nMin && judgeValidBST(root->left,nMin,root->val) && judgeValidBST(root->right,root->val,nMax)) return true; else return false; } bool isValidBST(TreeNode *root) { return judgeValidBST(root,INT_MIN, INT_MAX); }
相关文章推荐
- 个人记录-LeetCode 98. Validate Binary Search Tree
- LeetCode刷题笔录 Validate Binary Search Tree
- Leetcode NO.98 Validate Binary Search Tree
- leetcode:Validate Binary Search Tree
- leetcode 98. Validate Binary Search Tree
- Java for LeetCode 098 Validate Binary Search Tree
- LeetCode --- 98. Validate Binary Search Tree
- leetcode--Validate Binary Search Tree
- leetcode 98 Validate Binary Search Tree (python)
- 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-Validate Binary Search Tree
- 开始刷题leetcode day37:Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树
- leetcode validate binary search tree
- LeetCode 98. Validate Binary Search Tree