樹的括號表示法

2021-06-06 02:17:55 字數 1431 閱讀 2001

樹的括號表示法

時 限:

1000 ms

記憶體限制:

3000 k

總時限:

3000 ms

描述:樹的括號表示法:

先將根結點放入一對圓括號中,然後把它的子樹按由左而右的順序放入括號中,而對子樹也採用同樣方法處理:同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最後用閉括號括起來。例如下圖可寫成如下形式

(a(b,c,d,e))

a

/ | | \

b c d e

現在給定乙個多叉樹的括號表示法,要求你建立多叉樹,並按層序輸出。

輸入:多叉樹的括號表示法:字串

輸出:層序輸出多叉樹

輸入樣例:

(a(b,c,d,e))

輸出樣例:

abcde

思路:先判斷輸入的字串一共有幾層,如有levels層則動態初始化levels個佇列。

再從第乙個字元開始判斷字串中的當前字串是屬於哪一層的,若屬於第i層,則插入到第i層的佇列當中。

最後,依次將第1層到第levels層佇列中的元素出隊並輸出,則完成層序輸出。

#include #include #include typedef char elemtype;

/佇列相關/

typedef struct _qnode

qnode;

typedef struct _queue

queue;

void initqueue(queue &q)

//initqueue

bool isempty(queue &q)

//isempty

void enqueue(queue &q, elemtype e)

else

}//enqueue

bool dequeue(queue &q,elemtype &e)

free(node);

}return true;

}//dequeue

void destroyqueue(queue &q)

}//destroyqueue

//判斷輸入的字串共有幾層

int levels(char *&str)

return levels;

}//判斷當前的字元e屬於哪一層

int inlevel(char *&str,elemtype e)

return left-right;

}int main()

for(i=0;i}

//從第一層的佇列依次出隊並輸出,即為層序輸出

for(i=0;i}

printf("\n");

//銷毀所有佇列,可沒有,但為了程式的健壯性最好有

for(i=0;ireturn 0;

}

標題 樹的括號表示法

樹的括號表示法 時 限 1000 ms 記憶體限制 3000 k 總時限 3000 ms 描述 樹的括號表示法 先將根結點放入一對圓括號中,然後把它的子樹按由左而右的順序放入括號中,而對子樹也採用同樣方法處理 同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最後用閉括號括起來。例如下圖可...

有向樹與樹的括號序列最小表示法

有向樹 乙個弱連通有向圖,若去掉方向後得到一棵樹,則稱此有向圖為一棵有向樹,記為t。外向樹 若乙個有向樹t,有且只有乙個頂點入度為0,其餘頂點入度都為1,則稱t為外向樹。t中入度為0的節點被稱為t的根節點,出度為0的節點被稱為t的葉節點。每個節點的有向邊指向的節點被稱為該節點的子節點。內向樹 若乙個...

樹的雙親表示法

之前學習樹多是採用鍊錶的,在羊村捕羊的演算法上,採用了線性儲存,為此學習一下。雙親表示法區別於,鍊錶,是用線性陣列來存放樹的。既然是線性的,就用一維陣列來完成,開始想法是,每個陣列的元素為乙個結構體。typedef struct node n,pn 再用乙個結構體將這個線性陣列的資訊包含起來 typ...