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

问题描述

输入一个整数序列,判断该序列是否为一颗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);
	}
}

 

posted @ 2015-07-02 09:50  Chapter  阅读(161)  评论(0编辑  收藏  举报