前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang刷leetcode 技巧(44)合法二叉搜索树

golang刷leetcode 技巧(44)合法二叉搜索树

作者头像
golangLeetcode
发布2022-08-02 18:49:42
1240
发布2022-08-02 18:49:42
举报

实现一个函数,检查一棵二叉树是否为二叉搜索树。

示例 1:

代码语言:javascript
复制
输入:
    2
   / \
  1   3
输出: true

示例 2:

代码语言:javascript
复制
输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4 。

解题思路

1,如果没有叶子节点返回true

2,如果左子树非空,需要返回前缀节点路径上的最大值,且比根节点小

3,如果右子树非空,需要返回后缀节点路径上的最小值,且比根节点大

4,左右子树都是合法的

5,需要注意,不是前缀节点是前缀节点路径最大值

测试用例

[5,1,4,null,null,3,6]

[5,14,null,1]

代码实现

代码语言:javascript
复制
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isValidBST(root *TreeNode) bool {
   if root==nil || (root.Left==nil && root.Right==nil) {
       return true
   }

   valid:=true
   if root.Left!=nil{
      l:=pre(root.Left)
      if l>=root.Val{
          valid=false
      }
      fmt.Println(l,root)
   }
   if root.Right!=nil{
      r:=suc(root.Right)
      if r<=root.Val{
          valid=false
      }
       fmt.Println(r,root)
   }
   return valid && isValidBST(root.Left) && isValidBST(root.Right)
}

func pre(root * TreeNode) int{
    //root !=nil
    max:=root.Val
    cur:=root
    for cur!=nil{
        if cur.Right!=nil{
            cur=cur.Right
            if max<cur.Val{
            max=cur.Val
            }
        }else{
            cur=cur.Left
            if cur!=nil && max<cur.Val{
                max=cur.Val
            }
        }
    }
    return max
}

func suc(root*TreeNode)int{
     min:=root.Val
    cur:=root
    for cur!=nil{
        if cur.Left!=nil{
            cur=cur.Left
            if min >cur.Val{
            min=cur.Val
            }
        }else{
            cur=cur.Right
            if cur!=nil &&  min >cur.Val{
                min=cur.Val
            }
        }
    }
    return min
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档