樹的括號表示法
時 限:
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...