基本知識:
1)bst:二叉排序樹,即父節點大於左子節點,小於等於右子節點
2)後序遍歷: 先遍歷左子樹,再遍歷右子樹,最後遍歷根節點
基本思想:後續遍歷得到的陣列的最後乙個元素為根節點,前一部分為左子樹,後一部分為右子樹
前一部分中的元素都小於root(根),後一部分中的元素都大於root(根)
所以可以先遍歷前一部分,找到第乙個大於等於root的節點i,然後判斷此後的節點是否都大於root,如果不是就不是後序遍歷的結果,
如果是,則遞迴呼叫。
本文參考如下部落格: 部落格1
package test;
public class binarysortedtree
//遞迴呼叫左子樹
if(i > start)
lresult = isbst(array,start,i-1);
//遞迴呼叫右子樹
if(i < end)
rresult = isbst(array,i,end-1);
return (lresult&&rresult);
}public static void main(string args) ; //是後序遍歷的結果
int arraynotbst = ; //不是後序遍歷的結果
binarysortedtree bst = new binarysortedtree();
system.out.println("序列arraybst "+(bst.isbst(arraybst, 0, arraybst.length-1)==true?"是":"不是")+"後序遍歷的結果");
system.out.println("序列arraynotbst "+(bst.isbst(arraynotbst, 0, arraynotbst.length-1)==true?"是":"不是")+"後序遍歷的結果");
}}
判斷乙個數字是否是回文
最近碰到乙個題目,其中一步判斷數字是否為回文 由於題目要求是最短時間實現,不要考慮實現本身的效率 1如果直接去實現,就是比較數字的最高位值和最低位,然後再。public boolean isp int x if x temp bit bit為數值位數 int temp1,temp2 for int ...
判斷乙個數是否是質數
乙個數如果可以進行因數分解,那麼分解的兩個數一定是乙個小於等於sqrt n 乙個大於等於sqrt n 因此遍歷到sqrt n 即可。因為如果sqrt n 左側找不到因數,右側也一定找不到因數。中心思想 遍歷n是否能被2到sqrt n 之間的數整除,如果不能則為質數。import math defis...
判斷乙個數是否是素數
素數釋義 曾稱質數。乙個大於1的正整數,如果除了1和它本身以外,不能被其他正整數整除,就叫素數。如2,3,5,7,11,13,17 public boolean isprime int n for int i 2 i從2開始,一直到小於其自身,依次判斷能否被n整除即可,能夠整除則不是質數,否則是質數...