日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断给定的整数数组是不是某二叉搜索树的后序遍历的结果

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断给定的整数数组是不是某二叉搜索树的后序遍历的结果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉搜索樹:

又:二叉查找樹(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;} }

    ?

    總結

    以上是生活随笔為你收集整理的判断给定的整数数组是不是某二叉搜索树的后序遍历的结果的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。