leetcode || 98、Validate Binary Search Tree
2015-04-17 15:35
399 查看
problem:
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.
Hide Tags
Tree Depth-first
Search
题意:判断一颗二叉树是否为搜索二叉树,注意搜索二叉树的性质:左子树的所有节点小于父节点,
右子树的所有节点大于父节点
thinking:
(1)开始试着用递归写了一个程序,对搜索二叉树的定义曲解了。仅仅比较了左孩子和右孩子。是错的。
(2)正确解法是:中序遍历。采用DFS(非递归法)中序遍历二叉树,节点的VAL 应该是一个递增序列。
code:
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
"{1,#,2,3}"means? >
read more on how binary tree is serialized on OJ.
Hide Tags
Tree Depth-first
Search
题意:判断一颗二叉树是否为搜索二叉树,注意搜索二叉树的性质:左子树的所有节点小于父节点,
右子树的所有节点大于父节点
thinking:
(1)开始试着用递归写了一个程序,对搜索二叉树的定义曲解了。仅仅比较了左孩子和右孩子。是错的。
class Solution { public: bool isValidBST(TreeNode *root) { if(root==NULL) return true; TreeNode *parent = root; TreeNode *left_child=parent->left; TreeNode *right_child=parent->right; bool r=true; bool l=true; if(left_child!=NULL) { if(left_child->val<parent->val) l=isValidBST(left_child); else l=false; } if(right_child!=NULL) { if(right_child->val>parent->val) r=isValidBST(right_child); else r=false; } return l&&r; } };
(2)正确解法是:中序遍历。采用DFS(非递归法)中序遍历二叉树,节点的VAL 应该是一个递增序列。
code:
class Solution { public: bool isValidBST(TreeNode *root) { vector<int> ret=inorderTraversal(root); int n=ret.size(); if(n<2) return true; for(int i=1;i<n;i++) { if(ret[i]<=ret[i-1]) return false; } return true; } protected: vector<int> inorderTraversal(TreeNode *root) { vector<int> ret; stack<TreeNode*> _stack; TreeNode *tmp=root; while(tmp!=NULL || !_stack.empty()) { if(tmp!=NULL) { _stack.push(tmp); tmp=tmp->left; } else { tmp=_stack.top(); _stack.pop(); ret.push_back(tmp->val); tmp=tmp->right; } } return ret; } };
相关文章推荐
- leetcode 98 Validate Binary Search Tree (python)
- leetcode 98 Validate Binary Search Tree java 算法
- LeetCode 98: Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树
- LeetCode 98 — Validate Binary Search Tree(C++ Java Python)
- Leetcode-98: Validate Binary Search Tree
- 【LeetCode】C# 98、Validate Binary Search Tree
- leetcode98---Validate Binary Search Tree
- LeetCode98 Validate Binary Search Tree
- LeetCode98 Validate Binary Search Tree
- leetCode 98-Validate Binary Search Tree
- [leetcode][98] Validate Binary Search Tree
- LeetCode(98) Validate Binary Search Tree
- leetcode——98——Validate Binary Search Tree
- [Leetcode] #98 Validate Binary Search Tree
- Leetcode 98 Validate Binary Search Tree 验证二叉查找树
- Leetcode 98 Validate Binary Search Tree
- leetcode 98: Validate Binary Search Tree
- LeetCode题解-98-Validate Binary Search Tree
- Leetcode 98,Validate Binary Search Tree