luogu p1305 新二叉樹

2022-02-15 12:08:50 字數 1197 閱讀 1401

傳送門

輸入一串二叉樹,輸出其前序遍歷。

第一行為二叉樹的節點數 \(n\)。(\(1 \leq n \leq 26\))

後面 \(n\) 行,每乙個字母為節點,後兩個字母分別為其左右兒子。

空節點用*表示

二叉樹的前序遍歷。

6

abcbdi

cj*d**

i**j**

abdicj
這道題真的很簡單了,首先找根,其次遞迴左右節點即可。

找根這方面有點技巧,首先根在這些讀入的資訊中一定只出現了1次,因為根節點不會作為其他節點的左右子節點出現,只會以根的形式出現。也就是只會出現在資訊中的第一列一次。

除了根和星號以外,其他的字元一定出現了兩次,因為資訊要求任何節點都要表示出他的左右節點,哪怕是葉子節點也要表示出來兩個星號。因此也會在資訊的第一列出現一次。除此以外,除了根節點外,這個節點一定以子節點的形式出現在其他的資訊中,也就是出現在資訊的第二列或第三列一次。

這樣就很簡單了,異或是個好東西,同樣的數異或的結果是0,這樣我們就可以讀入乙個字元,如果這個字元s[i][j]不是星號,那麼root ^= s[i][j]。兩個同樣的數不會影響結果,這樣root的值就直接是根節點了。

然後是遞迴過程。首先遞迴函式中有乙個引數ch,然後我們在資訊中找到以ch為父親節點的那一條資訊,如果接下來的不是星號,則遞迴這條資訊的第二個字元和第三個字元,也就是遞迴ch的左右節點。當然也可以把if(ch == '*') return ;放在遞迴的開頭,也可以達到特判星號的目的。

//忘加水印啦~qwq我忘記啥時候開始打的**了,就不加啦~

#include #include std :: string s[35];

int n;

char root;

void work(char ch)

}int main()

work(root);

return 0;

}

ac 100:r31547308

1305 新二叉樹

難度 普及 題目型別 樹形結構 提交次數 1 涉及知識 二叉樹 輸入一串完全二叉樹,用遍歷前序打出。輸入格式 第一行為二叉樹的節點數n。後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 輸出格式 前序排列的完全二叉樹 1 include2 using namespace std...

P1305 新二叉樹

輸入一串二叉樹,用遍歷前序打出。輸入格式 第一行為二叉樹的節點數n。n 26n leq 26n 26 後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 輸出格式 前序排列的二叉樹 輸入樣例 1 複製 6 abcbdi cj d i j 輸出樣例 1 複製 abdicj思路 主要...

P1305 新二叉樹

輸入一串完全二叉樹,用遍歷前序打出。輸入格式 第一行為二叉樹的節點數n。後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 輸出格式 前序排列的完全二叉樹 輸入樣例 1 6 abcbdi cj d i j 輸出樣例 1 abdicj 桶。1 include2 include3 i...