zoukankan      html  css  js  c++  java
  • 剑指offer——二叉树的后续遍历

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

    解题思路:

    1. 后序遍历序列的最后一个元素为二叉树的根节点;
    2. 二叉搜索树左子树上所有的结点均小于根结点、右子树所有的结点均大于根结点。

    算法步骤如下:
    1. 找到根结点;
    2. 遍历序列,找到第一个大于等于根结点的元素i,则i左侧为左子树、i右侧为右子树;
    3. 我们已经知道i左侧所有元素均小于根结点,那么再依次遍历右侧,看是否所有元素均大于根结点;若出现小于根结点的元素,则直接返回false;若右侧全都大于根结点,则:
    4. 分别递归判断左/右子序列是否为后序序列;
     
     1 public class Solution {
     2     public boolean VerifySquenceOfBST(int [] sequence) {
     3         int length = sequence.length;
     4         if(length==0||sequence==null)
     5             return false;
     6         
     7         return have(sequence,0,length-1);
     8     }
     9     
    10     public static boolean have(int [] sequence,int start,int end)
    11     {
    12         if(start>end)
    13             return true;//如果遍历完数组没报错,返回true
    14         int i=start;
    15         for(;i<end;i++)
    16         {
    17             if(sequence[i]>sequence[end])
    18                 break;
    19         }
    20         
    21         int j=i;
    22         for(;j<end;j++)
    23         {
    24             if(sequence[j]<sequence[end])
    25                 return false;
    26         }
    27         
    28         boolean left = true;
    29         
    30         if(i>0)
    31         {
    32             left = have(sequence,start,i-1);
    33         }
    34         boolean right = true;
    35         
    36         if(i<end-1)
    37         {
    38             right = have(sequence,i,end-1);
    39         }
    40         
    41         return (left&&right);
    42     }
    43 }
     
  • 相关阅读:
    PC-CSS-默认字体样式
    PC--CSS维护
    PC--CSS技巧
    PC--CSS优化
    PC--CSS命名
    PC--CSS常识
    Base64与MIME和UTF-7
    Base64算法与多版本加密技术
    Base64算法与MD5加密原理
    log4j的使用
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10861123.html
Copyright © 2011-2022 走看看