Leetcode---Validate Binary Search Tree

需要牢记BST的定义:左边的所有节点都小于根节点,根节点小于右边的所有节点

所以这样的做法是错误的:


  1. bool isValidBST(TreeNode *root) {
  2.     if(root==NULL)
  3.         return true;
  4.     bool l=true;
  5.     bool r=true;
  6.     if(root->left!=NULL)
  7.         l=root->val>root->left->val;
  8.     if(root->right!=NULL)
  9.         r=root->val<root->right->val;
  10.     return l&&r&&isValidBST(root->left)&&isValidBST(root->right);
  11. }
而正确的做法应该是中序遍历,查看输出是不是有序的


  1. TreeNode * pre=NULL;
  2. bool isValidBST(TreeNode *root) {
  3.     if(root==NULL)
  4.         return true;
  5.     bool l=isValidBST(root->left);
  6.     if(pre==NULL)
  7.         pre=root;
  8.     else{
  9.         if(root->val<=pre->val){
  10.             return false;
  11.         }
  12.         pre=root;
  13.     }
  14.     bool r=isValidBST(root->right);
  15.     return l&&r;
  16. }
还有一种更直观的
  1. TreeNode * pre=NULL;
  2. bool flag=true;
  3. void f(TreeNode *root) {
  4.     if(root==NULL)
  5.         return;
  6.     f(root->left);
  7.     if(pre==NULL)
  8.         pre=root;
  9.     else{
  10.         if(root->val<=pre->val){
  11.             flag=false;
  12.             return;
  13.         }
  14.         pre=root;
  15.     }
  16.     f(root->right);
  17.     return;
  18. }
  19. bool isValidBST(TreeNode *root) {
  20.     f(root);
  21.     return flag;
  22. }




<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(42) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值