码迷,mamicode.com
首页 > 其他好文 > 详细

IT公司100题-9-判断整数序列是不是二元查找树的后序遍历结果

时间:2015-11-05 16:57:43      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。

如果是返回true,否则返回false。

例如输入4, 8, 6, 12, 16, 14, 10,由于这一整数序列是如下树的后序遍历结果:

 10
/     \
6      14
/  \    /   \
4   8 12    16

因此返回true。

如果输入6, 5, 8, 5, 7 ,则返回false。

 问题分析:

在后续遍历得到的序列中,最后一个元素为树的根结点。根节点元素将数组分为两部分,左边都小于根节点,右边都大于根节点。递归的确认左右是否是二元查找树即可。

代码实现:

/**
 * @project: oschina
 * @filename: IT9.java
 * @version: 0.10
 * @author: JM Han
 * @date: 8:40 2015/11/5
 * @comment: Test Purpose
 * @result:
 */

import static tool.util.*;

public class IT9 {
   static boolean verify(int start, int end, int[] a){
      //只有一个元素时 = ,返回true
      //左子树不存在是 > , 返回true
      if(start >= end)
         return true;

      int i; int j;
      for(i = start; a[i] < a[end]; i++);
      for(j = i; a[j] > a[end]; j++);

      //左子树和右子树加上root可以遍历完此部分数组,否则不是BST
      if(j != end)
         return false;

      boolean right = verify(start, i-1, a);
      boolean left = verify(i, j - 1, a);

      //进当左右子树都符合条件返回true
      if(right && left)
         return true;

      return false;
   }

   public static void main(String[] args) {
      //int[] a = new int[]{4,8,6,12,16,14,10};
      //int[] a = new int[]{4,8,6,12,16,11,10};
      //int[] a = new int[]{4,8,6,9,11,12,10};
      //int[] a = new int[]{4,8,6,12,9,11,10};
      boolean res = verify(0, a.length-1, a);
      String isn = res?"is":"isn‘t";
      System.out.println("Array " + isn + " a tree of postorder tranversal");
   }
}


IT公司100题-9-判断整数序列是不是二元查找树的后序遍历结果

标签:

原文地址:http://my.oschina.net/jimmyhan/blog/526570

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!