建立二叉樹A openjudge

2021-06-14 06:41:09 字數 1551 閱讀 9186

總時間限制

:1000ms 

記憶體限制

:

65535kb

描述

給出一顆二叉樹根節點到各葉子節點的路徑,建立這顆二叉樹,輸出中序遍歷的結果。

輸入

第一行輸入乙個整數t,代表測試資料的組數。

對於每組測試資料,第一行輸入乙個整數n,代表二叉樹根節點到各葉子節點的路徑數目。

隨後輸入n行,每行包含乙個字串s, 代表從根節點走向對應葉子節點的路徑。

路徑中每個節點用兩個字元表達:第乙個字元要麼為 『+』 要麼為 『-『, 『+』代表網左孩子方向走,』-』代表往右孩子方向走。第二個字元是乙個大寫的英文本母,表示對應節點編號。

比如 +b-c 代表 從根結點向左走到b節點,再向右走到c節點。

根節點編號始終是字元『a』,不會有重複編號的節點。

字串s長度不超過20 , n <= 26

輸出

每組測試資料,輸出一行,對應二叉樹的中序遍歷結果。

樣例輸入

3
3
+b-d
-c+e
-c-f
2
+b
-c
1
+b+c+d+e
樣例輸出

bdaecf
bac
edcba
提示二叉樹的節點用結構體儲存。

結構體宣告為:

struct node

;建立乙個新節點通過malloc函式實現

node *node = (node *)malloc(sizeof(node));

如果對於指標使用不熟悉,也可以採用陣列下標來實現。

結構體宣告成以下形式:

struct node

;同時開闢乙個陣列

struct node node[110];

用乙個變數p來控制每次新節點的申請。

#include #include #define maxsize 100

char str[maxsize];

typedef struct node

btree;

btree *b;

void creatree(char *str)

ch++;

}}void inorder (btree *root)

}int main()

inorder(b);

printf("\n");

}return 0;

}

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...

建立二叉樹

今天看到了乙個資料結構的筆試題目,他要求寫出建立二叉樹的程式。我想練習練習,所以想了一下其大致的思路,記錄如下 題目的要求很簡單,給出乙個字串序列 比如說a b d,e h j,k l,m n c f,g i 然後要求按照其規則建立二叉樹,題目不難但是卻花費了我不少的時間 第一步,我想到的是需要什麼...

建立二叉樹

二叉樹在結構上不依賴組織鍊錶 指路法通過根節點與目標節點的相對位置進行定位 define bt left 0 define bt right 1 typedef unsigned long long btpos 結點指標域定義 typedef struct tag btressnode btress...