problem d: 二叉樹的中序遍歷
description
對於學過資料結構的人來說,二叉樹和二叉樹上的中序遍歷都是再簡單不過的東西了。這道題就搞搞二叉樹好了,當然,不是一般的二叉樹:)
我們定義一種a二叉樹,它的節點內容可以是任乙個數字或者#,#只能作為葉子節點的內容。
如下就是一棵合法定義的a二叉樹1:
再來一棵不合法的a二叉樹2:
(根節點的左兒子的內容是#,因此不應該有乙個左兒子3)
對於a二叉樹1,我們可以進行對他進行中序遍歷,得到序列(1)#4112#37;對於a二叉樹2,可以得到序列(2)3#912#。儘管序列(2)出自乙個不合法的a二叉樹,但是根據序列(2),可以輕鬆建立一棵合法的a二叉樹3:
那麼,存在乙個無法建立合法的a二叉樹的序列嗎?答案是肯定的。如序列####就無法建立合法的a二叉樹,因為超過乙個結點的二叉樹不可能沒有非葉子結點。題目將給出若干序列,請你判斷該序列是否能建立乙個合法的a二叉樹,使得建立的a二叉樹的中序遍歷結果為該序列。
input
第一行輸入乙個整數t,代表接下來有多少個樣例。 接下來有t行輸入,每行輸入為僅包含數字與#的字串,字串長度小於等於100000。
output
對於每個給定樣例,輸出一行結果並換行。如果能夠建立,則輸出yes,否則no
sample input
3#4112#37
3#912#
####
sample output
yesyes
nohint
//比賽的時候因為沒看到要求中序輸出樣式而wa。。
//唯一的特殊情況就是不##相連
#include
#include
char a[100001];
int judge(int len)
if(j>s+1) return
0; return1;}
int main(void)
二叉樹專題 lintcode二叉樹的層序遍歷
層序遍歷算是遍歷方式中,比較容易掌握的,實質就是寬度優先遍歷,bfs的基本 塊如下 void bfs 放到二叉樹的遍歷中來看,首先根節點入隊,根出隊,訪問根節點,再入隊左孩子,入隊右孩子 這樣再出隊時,就是訪問的第二層的左側.以此類推 我們來看看題目考察的方式 由以上的分析,容易想到先取到這一層的元...
從二叉樹的先序和中序構建二叉樹
對於二叉樹,我們一般的遍歷方式有先序遍歷 preorder 中序遍歷 inorder 後序遍歷 afterorder 層序遍歷 levelorder 每個遍歷方式都有自己的特點 這個大家可以自行了解,很簡單 下面我們就來看一下利用樹的先序 後序 和中序遍歷來構建二叉樹 先序遍歷的特點 陣列的頭一定是...
中序線索二叉樹
就是在中序遍歷的時候加上線索,為了區分線索和孩子,要多加兩個標誌變數ltag,rtag如果標誌為true就表明是線索,如果為false就表示孩子 一般規定是將做指標為空的指標域用來存放直接前驅 將有指標為空的指標域用來存放直接後繼 當然如果不為空的話就不會用來存放前後繼,而是孩子了 意思就是存放前繼...