《演算法筆記》9 3 樹的遍歷

2021-10-05 12:44:47 字數 1976 閱讀 7888

一.樹的靜態寫法

1.結構體:

struct node node[maxn]

;

2.新建結點:

int index =0;

intnewnode

(int v)

3.如果題目中不涉及結點的資料域,上面的結構體可以簡化地寫成 vector 陣列:vectorchild[maxn];二.樹的先根遍歷

void

preorder

(int root)

三.樹的層序遍歷

void

layerorder

(int root)

}

四.題目

1.pat a1053

思路:1).儲存要輸出的數,用乙個陣列就夠了,每次迴圈時同下標的陣列元素都不同,所以可以用來儲存不同答案;

2).dfs的函式引數:當前陣列下標,path陣列當前的大小,當前的權值和;

3).路徑從大到小:用 sort 函式給子結點排序(權值從大到小);

**:

#include

#include

#include

using

namespace std;

const

int maxn =

110;

int n, m, s;

int path[maxn]

;struct node node[maxn]

;bool

cmp(

int a,

int b)

void

search

(int index,

int numnode,

int sum)

}return;}

if(sum > s)

return

;for

(int i =

0; i < node[index]

.num; i++)}

intmain()

sort

(node[x]

.child.

begin()

, node[x]

.child.

end(

), cmp);}

search(0

,0,0

);return0;

}

2.pat a1079

注意:1).在此題的 dfs 函式中,不能將 ans 作為引數,若為引數,每一層的 ans 都是一樣的(最後會是0), i = 0 時 ans 的變化到不了 i = 1 裡;

演算法筆記 樹遍歷基本操作

本章內容討論的是一般意義上的樹,即子結點個數不限且子結點沒有先後次序的樹。建議使用靜態寫法,即用陣列下標來代替所謂的位址。這需要事先開乙個大小不低於結點上限個數的結點陣列。struct node node maxn 結點陣列,maxn為結點上限個數而child陣列的長度由於無法預知子結點個數只能開到...

演算法練習筆記(七) 在BST樹中的遍歷

一般來說,bst 二叉排序樹 有分三種遍歷,前序遍歷,中序遍歷和後序遍歷。前序遍歷順序是根在前的根,左子樹,右子樹 也是我們一般來表示一棵樹的方法 中序 左子樹,根,右子樹 後序 左子樹,右子樹,根 值得注意的是在bst樹的中序遍歷之中,結果必然是遞增的。於是對於下面這一道題目 題目 kth sma...

《演算法筆記》9 2 二叉樹的遍歷

一.先序遍歷 根結點 左子樹 右子樹 void preorder node root 性質 序列的第乙個一定是根結點 二.中序遍歷 左子樹 根結點 右子樹 void inorder node root 性質 只要知道根結點,就可以區分左子樹和右子樹 三.後序遍歷 左子樹 右子樹 根結點 void p...