輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。假設輸入的陣列的任意兩個數字都互不相同。
例如,下圖是後序遍歷序列 3,1,2 所對應的二叉搜尋樹。
bst的後序序列的合法序列是,對於乙個序列s,最後乙個元素是x (也就是根),如果去掉最後乙個元素的序列為t,那麼t滿足:t可以分成兩段,前一段(左子樹)小於x,後一段(右子樹)大於x,且這兩段(子樹)都是合法的後序序列。完美的遞迴定義
class solution
public:
bool verifysquenceofbst(vector
sequence)
};
public
boolean
verifysquenceofbst(int sequence)
private
boolean
verify(int sequence, int first, int last)
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
下圖的二叉樹有兩條和為 22 的路徑:10, 5, 7 和 10, 12
輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的 head。
//建立random鏈結
cur = phead;
while(cur!=
null)
//拆分
cur = phead;
randomlistnode *pclonehead = phead->next;
while(cur->next !=
null)
return pclonehead;}};
public randomlistnode clone(randomlistnode phead)
// 建立 random 鏈結
cur = phead;
while (cur != null)
// 拆分
cur = phead;
randomlistnode pclonehead = phead.next;
while (cur.next != null)
return pclonehead;
}
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
//直接用中序遍歷
public
class solution
private
void
convertsub(treenode prootoftree) else
convertsub(prootoftree.right);}}
劍指offer題解
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 這題較好的思路有兩個,乙個是最容易想到的nlog,枚舉行,二分列。另一種就是從左下角逐步列舉,如果大於目標值就向上走,小於目標值...
劍指Offer題解索引
陣列中重複的數字 二維陣列中的查詢 構建乘積陣列 替換空格 字元流中第乙個不重複的字元 表示數值的字串 斐波那契數列 跳台階 跳台階 矩形覆蓋 從尾到頭列印鍊錶 刪除鍊錶中重複的結點 鍊錶中環的入口結點 把二叉樹列印成多行 按之字形順序列印二叉樹 對稱的二叉樹 二叉樹的下乙個結點 資料流中的中位數 ...
劍指offer部分題解(1)
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 注意點class solution string printminnumber vector int numbers sort ...