[LeetCode]Validate Binary Search Tree
2015-09-29 11:10
393 查看
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. OJ's Binary Tree Serialization: The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below. Here's an example: 1 / \ 2 3 / 4 \ 5 The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
思路一:二叉树(二叉搜索树)的中序遍历(左中右)应该是递增的序列。
所以只要写一下中序遍历即可。
/** * 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) { stack<TreeNode*> sta; TreeNode* T=root; double left_ele = INT_MIN-1.0; while(!sta.empty()||T){ while(T){ sta.push(T); T=T->left; } T = sta.top(); sta.pop(); if(T->val>left_ele) left_ele = T->val; else return false; T =T->right; } return true; } };
16ms AC
第二种思路就是递归,向左递归时,更新上界;向右递归时,更新下界。
/** * 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) { double upper = INT_MAX+1.0; double lower = INT_MIN-1.0; return check(root, upper,lower); } bool check(TreeNode* T, double upper, double lower){ if(!T) return true; else if(T->val>=upper||T->val<=lower) return false; return check(T->left,T->val,lower)&check(T->right,upper,T->val); } };
16ms AC
相关文章推荐
- OAuth协议详解
- nsq 学习
- Word Frequency
- Stm32-窗口看门狗实验
- 阿里云主机centos设置虚拟内存(交换分区)
- php不同类型数据的转换
- js中关于map的增、删、改、查操作及其js中如何建立一个对象
- nrf51822开发问题汇总【持续添加】
- "未找到应用程序的“aps-environment”的权利字符串"
- Oracle登录命令
- iOS数据本地化
- nodejs模块xml2js解析xml的坑
- "未找到应用程序的“aps-environment”的权利字符串"
- nodejs模块xml2js解析xml的坑
- 我喜欢单纯,只喜欢单纯! 单纯的程序人生。
- 对“键盘读入”的处理
- 配置 log4j 在控制台输出 sql 语句
- PAT(甲级)1091
- DNS服务之正反向解析、主从服务配置
- 你没有变强,只因你不够努力