問題:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
解析:1)所謂二叉搜尋樹,是指空樹,或其左子樹的元素都小於根元素,右子樹的元素都大於根元素,且其左子樹和右
子樹都是二叉搜尋樹。
2)二叉搜尋樹後序遍歷序列有如下特徵:a、最後乙個元素是根元素;b、左側元素可以分為left、right兩部分陣列,分別是根元素的左孩子和右孩子。
解題思路:
宣告兩個陣列,存放根元素的左子樹和
右子樹,在存放過程中,若出現錯誤情況,可直接返回false,若分組成功,則分別對根元素的左子樹和
右子樹進行遞迴。具體**如下所示:
bool verifysquenceofbst(vectorsequence)
else
left.push_back(*it);
for(;it!=sequence.end();it++)
if(*it>midval)
right.push_back(*it);
else
return false;
if(right.empty())
right.push_back(1);
return(verifysquenceofbst(left)&&verifysquenceofbst(right));
}
判斷二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。分析 採用遞迴的思想,先找出根節點,左子樹元素都必須比根節點小,右子樹節點都比根節點大,否則返回false.得到子樹 子串行 的兩種方法 用下標把陣列 邏輯分為幾...
二叉搜尋樹的後序遍歷判斷
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。之前對於二叉搜尋樹,只知道中序遍歷是遞增的,今天做到這道題目,要求判斷陣列是不是二叉搜尋樹後序遍歷的結果,一開始有點懵,後來在紙上畫畫,感覺很像遞迴的感覺,有一種...
二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...