• 剑指 Offer 33. 二叉搜索树的后序遍历序列


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

    参考以下这颗二叉搜索树:

        5
        / 
       2   6
      / 
     1   3
    

      

    示例 1:

    输入: [1,6,3,2,5]
    输出: false

    示例 2:

    输入: [1,3,2,6,5]
    输出: true  
    

    代码和思路:

    class Solution {
        public boolean verifyPostorder(int[] postorder) {
            //首先明确一点,二叉搜索树是有序树
            if (postorder.length < 2){
                return true;
            }
            return verify(postorder, 0, postorder.length - 1);
        }
        // 递归实现
        private boolean verify(int[] postorder, int left, int right)
        {
            if (left >= right) 
            {
                return true; //当前区域不合法的时候直接返回true就好
            }
            int rootValue = postorder[right]; // 当前树的根节点的值
            int k = left;
            while (k < right && postorder[k] < rootValue)
            {
                // 从当前区域找到第一个大于跟节点的,说明后续区域树值都在右子树中
                k++;
            }
            for (int i = k; i < right; i++)
            {
                // 进行判断后续的区域是否所有的值都是大于当前的根节点,如果出现小于的值直接返回false
                if(postorder[i] < rootValue)
                {
                    return false;
                }
            }
            // 当前树没问题就检查左右子树
            if (!verify(postorder, left, k-1))
            {
                return false; // 检查左子树
            }
            if (!verify(postorder, k, right - 1))
            {
                return false;  //检查右子树
            }
            return true; //最终都没问题就返回 true
        }
    }
    

      

  • 相关阅读:
    做了一个非常小的WPS插件
    小幸福
    被迫积极
    将要从csdn搬过来了!
    游戏框架设计Ⅰ—— 游戏中的事件机制
    *VB中实现OpenGL的截屏(glReadPixels)
    *D3D中把场景保存为图片的方法
    *vc中检测内存泄露的工具VLD(visual leak detector) 转
    纯虚函数能为private吗?
    vc中调用Com组件的方法详解
  • 原文地址:https://www.cnblogs.com/ziytong/p/14922874.html
Copyright © 2020-2023  润新知