面试题33:二叉搜索树的后序遍历序列

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

思路:
这道题目经过实例分析可以得出规律,后序遍历的结果中,最后一个节点是根节点,左子树比根节点小,右子树比根节点大,所以遍历找到子树的分界点,然后判断右子树是否合法,接着进行递归左右子树。具体如下:

33 二叉搜索树的后序遍历.png

代码实现:

# -*- coding:utf-8 -*-
class Solution:
    def VerifySquenceOfBST(self, sequence):
        # write code here
        if sequence == None or len(sequence)<=0:  #**注意这二者不一样
            return False

        root = sequence[-1] #根节点
        num = 0   #在循环里的i出循环就无意义,因此在此定义

        for i in range(len(sequence)-1):
            if sequence[i] > root:
                break        #找到右子树的起点
            num+=1

        for j in range(num,len(sequence)-1):
            if sequence[j] < root:
                return False    #判断右子树的合理性

        #递归左子树
        left = True
        if (num>0):
            self.VerifySquenceOfBST(sequence[:i])
        #递归右子树
        right = True
        if (num

提交结果:

注:

通过该题发现:
1.列表为none和列表的长度为0不一样;
2.for循环中的变量可以被继续赋值或者被运用,但是不能用在另一个非嵌套的for循环里当作遍历条件,否则会出现这个变量在赋值之前就引用的错误!!!

你可能感兴趣的:(面试题33:二叉搜索树的后序遍历序列)