zoukankan      html  css  js  c++  java
  • JZ23 二叉搜索树的后序遍历序列

    二叉搜索树的后序遍历序列

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

    解题思路
    二叉搜索树:左子树的元素是都小于根元素,右子树都大于根元素
    后序遍历:首先遍历左子树,然后遍历右子树,最后访问根结点,所以数组最后一个元素是根元素。
    从前面开始遍历,小于的当前根元素的值是左子树的,当找到第一个大于当前根元素的值,可以确定后半段的元素都应是在当前节点的右子树
    如果后半段(右子树)里面有小于根元素的值的元素,就说明这个不是二叉搜索树的后序遍历。最后循环校验每个子树是否也满足二叉搜索树的后序遍历即可。

    func helper(sequence []int, start, end int) bool {
        if start > end {
            return true
        }
        var i int
        for i = start; i < end; i++ {
            if sequence[i] > sequence[end] {
                break
            }
        }
        
        for j := i; j < end; j++ {
            if sequence[j] < sequence[end] {
                return false
            }
        }
        return helper(sequence, start, i - 1) && helper(sequence, i, end - 1)
    }
    
    func VerifySquenceOfBST( sequence []int ) bool {
        if len(sequence) == 0 {
            return false
        }
        return helper(sequence, 0, len(sequence) - 1)
    }
  • 相关阅读:
    H5调用Android播放视频
    JavaScript调Java
    Java调用JavaScript
    python的下载和安装
    s5_day1作业
    s5_day2作业
    pycharm激活(转)
    for…else和while…else
    小练习
    09 grep、正则表达式和sed
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14635521.html
Copyright © 2011-2022 走看看