一.樹的靜態寫法
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...