zoukankan      html  css  js  c++  java
  • 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);
    	}
    }
    
  • 相关阅读:
    CCF201604试题
    CCF201512试题
    CCF201509试题
    CCF201509试题
    CCF201503试题
    CCF201503试题
    CCF201412试题
    CCF201412试题
    CCF201409试题
    CCF201409试题
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4615231.html
Copyright © 2011-2022 走看看