• 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)
    }
  • 相关阅读:
    【初心】
    【杂题集】单题小总结
    【模板】(旧)矩阵模板
    【机智题?】【Vijos】【天平称量】
    【杂题集】【51NOD 1267】4个数和为0
    【模板】(旧)Miller Rabin 素数判定
    【杂谈】只是想想
    【杂谈】思考
    【学习?】组合和排序
    【模版】读入优化
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14635521.html
Copyright © 2020-2023  润新知