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);
	}
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号