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

Solution 9: 判断序列是否为BST的后续遍历结果

时间:2015-07-02 11:35:44      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:

问题描述

输入一个整数序列,判断该序列是否为一颗BST的后序遍历序列。

 

解决思路

递归:

(1) 序列的最后一个元素为根节点元素;

(2) 在序列中找出前一段代表根节点的左子树孩子们,而剩下的一段为右子树孩子们,检查这些节点的值是否都是大于(等于根节点元素)。

(3) 然后递归的对两部分进行判断。

 

程序

public class IsPostorderSequence {
	public boolean isPostorderSeq(int[] nums) {
		if (nums == null || nums.length == 0) {
			return true;
		}

		return helper(nums, 0, nums.length - 1);
	}

	private boolean helper(int[] nums, int begin, int end) {
		if (begin >= end) {
			return true;
		}

		int rootVal = nums[end];
		int i = 0;
		for (; i < end; i++) {
			// find left nodes
			if (nums[i] > rootVal) {
				break;
			}
		}

		for (int j = i; j < end; j++) {
			// check right nodes
			if (nums[j] <= rootVal) {
				return false;
			}
		}

		return helper(nums, 0, i - 1) && helper(nums, i, end - 1);
	}
}

 

Solution 9: 判断序列是否为BST的后续遍历结果

标签:

原文地址:http://www.cnblogs.com/harrygogo/p/4615231.html

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