1. 程式人生 > >樹五:二叉搜尋樹的後序遍歷序列

樹五:二叉搜尋樹的後序遍歷序列

/**
 * 題目:二叉搜尋樹的後序遍歷序列
 * 描述:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同
 *   二叉搜尋樹,又叫二叉排序樹,它或者是一顆空樹,或者具有以下性質:
 *   若他的左子樹都不為空,則左子樹上所有結點的值均小於他根結點的值,
 *  若他的右子樹都不為空,則左子樹上所有結點的值均大於他根結點的值,
 *  且左右子樹都是後續遍歷序列
 *     擷取陣列一部分用Arrays.copyOfRange(sequeue,o,i);
 * 方案:判斷其輸入的陣列是否滿足其性質即可  
 * */

public class Five {
    
    public static boolean one(int[] sequeue) {
        if(sequeue == null || sequeue.length == 0) {
            return false;
        }
        int root = sequeue[sequeue.length-1];        
        int i =0;
        for(;i<sequeue.length-1;i++) {  //判斷左子樹
            if(sequeue[i] >root) {
                
break; } } int j =i; for(;j<sequeue.length-1;i++) { //判斷右子樹 if(sequeue[j] <root) { return false; } } boolean left = true; if(i>0) { left = one(Arrays.copyOfRange(sequeue, 0, i)); }
boolean right = true; if(j < sequeue.length-1) { right = one(Arrays.copyOfRange(sequeue, j, sequeue.length-1)); } return left && right; } }