演算法筆記 一般意義上的樹的基本操作集

2021-10-08 19:01:43 字數 1205 閱讀 6380

這裡的樹指的是一般意義上的樹,即子結點個數不限且沒有先後次序的樹,並不僅僅是二叉樹。

這裡採用的是樹的靜態寫法~

(參考《演算法筆記》)

struct node node[maxn];  //結點陣列 

int index = 0;

int newnode(int v)

//樹的先根遍歷

void preorder(int root)

}//樹的層序遍歷

void layerorder(int root)

}}

應用即為pat甲級的一題:

1053 path of equal weight (30分)

#include using namespace std;

#define pb push_back

typedef double db;

typedef long long ll;

typedef vectorvi;

const int inf = 2e9;

const ll inf = 8e18;

const int maxn = 110;

int n, m, s; //結點數、邊數、給定的和

int path[maxn]; //記錄路徑

struct nodenode[maxn];

bool cmp(int a, int b)

//當前訪問結點為index,numnode為當前路徑上結點個數

void dfs(int index, int numnode, int sum)

printf("\n");

return;

} for (int i = 0; i < node[index].child.size(); ++i)

}int main()

int idx, k, tmp;

for (int i = 0; i < m; ++i)

sort(node[idx].child.begin(), node[idx].child.end(), cmp);

} path[0] = 0; //路徑第乙個點為0號結點

dfs(0, 1, node[0].w); //目前已有1個結點

return 0;

}

一般Fibonacci演算法的優化

一般的fibonacci演算法 int fibonacci int number 該演算法的時間複雜度達到了驚人的指數級別,效率慢的不行,下面提供兩種不同的改進方式,時間複雜度分別為o n 和o logn 方法一 o n int fibonacci int number int result 0 f...

一般控制的基本code思路

正好寫到溫控,很麻煩。多個點位間的溫差,感測器故障等等,諸如此類問題。每逢coding都想造輪子,通用的輪子。沉吟之下覺得一般控制都是可以遵循一套基本框架的。所謂控制,不管控制的是什麼,大致流程就是 採集資料 分析資料 結果處理,這一過程的迴圈。這個過程又可以分為兩部分 採集資料和結果處理,及分析資...

通過遞迴演算法完成樹的級聯勾選的一般思路

在某個專案中,發現當tree上加上checkbox後,初始化該樹時會特別慢。現場樹上的節點最深有三層,節點個數總和有200多個。經排查,為該tree的引數中開啟了級聯勾選的引數,導致初始化該樹時每初始化乙個節點便進行了一次級聯判斷,如此效率過低導致。現在將級聯勾選去除後,涉及到如下幾個問題需要解決 ...