zoukankan      html  css  js  c++  java
  • 剑指offer面试题24:二叉搜索树的后序遍历序列


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

    解题思路:二叉搜索树的特点是根节点的左子树的值小于等于根节点的值,右子树的结点的值大于等于根节点的值。

    在二叉树的后序遍历序列中,最后一个数字是树的根节点。

    根据二叉搜索树的后序遍历特点,序列的前半部分是左子树结点的值,他们都比根的值小;后半部分是右子树结点的值,他们都比根的值大。

    举一反三:要求处理一颗二叉树的遍历序列,可以先找到二叉树的根节点,在基于根节点把整棵树的遍历序列拆分成左子树对应的序列和右子树对应的序列,接下来再递归的处理这两个子序列。

    package Solution;
    
    
    public class No24SequenceOfBinarySearchTree {
    
        public static void main(String[] args) {
            int[] array1 = { 5, 7, 6, 9, 11, 10, 8 };
            System.out.println(verifySequenceOfBinarySearchTree(array1, 0,
                    array1.length - 1));
            int[] array2 = { 7, 1, 6, 5 };
            System.out.println(verifySequenceOfBinarySearchTree(array2, 0,
                    array2.length - 1));
    
        }
    
        public static boolean verifySequenceOfBinarySearchTree(int[] array,
                int start, int end) {
            if (array == null || start > end || start < 0 || end < 0)
                return false;
            if (start == end)
                return true;
            int root = array[end];
            int i = start;
            for (; i < end; i++) {
                if (array[i] > root)
                    break;
            }
            int j = i;
            for (; j <= end; j++) {
                if (array[j] < root)
                    return false;
            }
            // 递归判断左子树是不是二叉搜索树
            boolean left = false;
            if (i > start) {
                left = verifySequenceOfBinarySearchTree(array, start, i - 1);
            }
            // 递归判断右子树是不是二叉搜索树
            boolean right = false;
            if (i < end) {
                right = verifySequenceOfBinarySearchTree(array, i, end - 1);
            }
            return left && right;
        }
    }
  • 相关阅读:
    异常练习
    Comparator 排序 ArrayList 实操练习
    50道Java线程面试题
    Java ArrayList排序方法详解
    Map集合利用比较器Comparator根据Key和Value的排序
    Java Map 键值对排序 按key排序和按Value排序
    实现java随机数Random的几招
    如何在Java中获取键盘输入值
    力扣 ——3Sum python (三数之和)实现
    python中函数用法
  • 原文地址:https://www.cnblogs.com/gl-developer/p/7259365.html
Copyright © 2011-2022 走看看