生活随笔
收集整理的這篇文章主要介紹了
判断给定的整数数组是不是某二叉搜索树的后序遍历的结果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉搜索樹:
又:二叉查找樹(Binary Search Tree),二叉排序樹;
它或者是一棵空樹,或者是具有下列性質的二叉樹:
- 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
- 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值; 它的左、右子樹也分別為二叉搜索樹。
數大于根肯定往根的右子樹走,小于往左子樹走
?
后序遍歷:
左子->右子->根
想法(參考https://blog.csdn.net/xidiancoder/article/details/60956436)
給出的整數數組:a[n]
method(a[n])
為空,返回false;只有一個元素,返回true;root=a[n-1];從0~n-2找出第一個a[i]>root(沒找到,則都為左子樹) 若i<n-1,有右子樹;i>0,有左子樹0~i-1是左子樹,method(a[i-1])如果a[i]~a[n-2]都大于root,則i~n-2是右子樹,method(a[n-1-1]),否則返回false(不符合之前的“大于root都在右子樹”的定義)return 3.2&3.3
public class Solution {
public static boolean VerifySquenceOfBST(int [] sequence) {int index;boolean Rflag=false;boolean Lflag=false;int n=sequence.length;if(n==0)return false;if(n==1)return true;int root=sequence[n-1];index=FindIndex(sequence,root);for(int i=index+1;i<n-1;i++) {if(sequence[i]<root)return false;}if(index<n-1) {int lenR=n-1-index;int[] arrR=new int[lenR];for(int i=index,j=0;i<n-1;j++,i++) {arrR[j]=sequence[i];}Rflag=VerifySquenceOfBST(arrR);}elseRflag=true;if(index>0) {int lenL=index;int[] arrL=new int[lenL];for(int i=0;i<index;i++) {arrL[i]=sequence[i];}Lflag=VerifySquenceOfBST(arrL);}elseLflag=true;return Lflag&&Rflag;
}public static int FindIndex(int[] arr,int val) {int n=arr.length;for(int i=0;i<n-1;i++) {if(arr[i]>val)return i;}return n-2;}
}
?
總結
以上是生活随笔為你收集整理的判断给定的整数数组是不是某二叉搜索树的后序遍历的结果的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。