挑戰程式設計競賽(第二彈)第8章 樹——學習筆記
利用「左子右兄弟表示法」
#include using namespace std;
const int max = 100005;
const int nil = -1;
struct node tree[max];
int n, depth[max];
void rec(int u, int d);
void print(int u);
int main()
}//找出樹的根結點
for (int i = 0; i < n; i++)
//遞迴求深度,根結點root深度為0
rec(root, 0);
//按要求輸出
for (int i = 0; i < n; i++)
print(i);
return 0;
}void rec(int u, int d)
void print(int u)
cout << "]" << endl;
return;
}
表示式樹 無根樹轉化為有根樹
將無根樹轉化為有根樹 vectorg maxn void read tree 轉化過程 void dfs int u,int fa 遞迴轉化為以u為根的子樹,u的父節點為fa 主程式要設定p root 1,然後在呼叫dfs root,1 p353表示式樹 const int maxn 1000 in...
無根樹轉有根樹
乙個n n 1000000 個結點的無根樹的各條邊,並指定乙個根結點,要求把樹轉化為有根樹。輸入 結點的數目n,無根樹的各條邊,輸入乙個根結點號。輸出 各個結點的父親編號。執行結果 演算法實現 為方便起見,我們用了stl中的vector來儲存邊,g u 表示u結點的相鄰結點的編號。樹的儲存結構定義 ...
無根樹變為有根樹
即無環連通無向圖 若乙個圖中每條邊都是無方向的,則稱為無向圖。無根樹它要求每個頂點之間都直接或間接相連,且圖中無環,即只有簡單路徑。由於樹是圖的子集,這一類圖具有樹的特徵,但不具有樹狀的形式,沒有特定的根節點,故稱為無根樹。任意選取圖中某個點為根,均可將無根樹轉化為有根樹。includeusing ...