樹和二叉樹相關演算法(二 c c

2022-09-04 09:36:05 字數 3011 閱讀 8411

1

//層次遍歷演算法2//

順序環形佇列

3 typedef struct

sqqueue; 89

void initqueue(sqqueue *&qu)

1015

16bool enqueue(sqqueue *&qu,btnode *b)

1724

25bool dequeue(sqqueue *&qu,btnode *&b)

2632

33bool queueempty(sqqueue *&qu)

3437

38void levelorder(btnode *b)

3954}55

56//

用層次遍歷輸出根節點到所有葉子節點的路徑(迷宮問題的思路)

57//

結點型別

58 typedef struct

nodetype;

62//

順序隊

6364

void allpath2(btnode *b)

6586 cout88if(p.b->lchild !=null)

8994

if(p.b->rchild !=null)

95100

}101

}102

//先序序列和中序序列生成二叉樹

103 btnode *createbt1(char *pre,char *in,int

n)104

117 k = p - in

;118 b->data = *p;

119 b->lchild = createbt1(pre + 1,in

,k);

120 b->rchild = createbt1(pre+k+1,p+1,n-k-1

);121

122return

b;123

}124

//後序序列和中序序列生成二叉樹

125 btnode *createbt2(char *in,char *post,int

n)126

139 k = p - in

;140 b->data = *p;

141 b->lchild = createbt2(in

,post,k);

142 b->rchild = createbt2(in+k+1,post+k,n-k-1

);143

144return

b;145

} 146

//二叉樹順序儲存結構轉換為鏈式儲存結構

147typedef elemtype sqbtree[maxsize];

148 btnode *trans(sqbtree a,int

i)149

162163//

中序線索化二叉樹

164 typedef struct

tbtnodetbtnode;

171172 tbtnode *pre;

173174

void thread(tbtnode *&p)

175

184else

185 p->rtag = 0

;186

if(pre->rchild ==null)

187

191else

192 pre->rtag = 0

;193 pre =p;

194 thread(p->rchild);

195}

196}

197198 tbtnode *createthread(tbtnode *b)

199216

return

root;

217}

218219

//構造哈夫曼樹

220 typedef struct

htnode;

227228

void createht(htnode ht,int

n0)229

248else

if(ht[k].weight 249253

}254

}255 ht[lnode].parent =i;

256 ht[rnode].parent =i;

257 ht[i].lchild =lnode;

258 ht[i].rchild =rnode;

259 ht[i].weight = ht[lnode].weight +ht[rnode].weight;

260}

261}

262263

//根據哈夫曼樹求對應的哈夫曼編碼

264 typedef struct

265hcode;

269void createhcode(htnode ht,hcode hcd,int

n0)270

285 hc.start++;

286 hcd[i] =hc;

287}

288}

289290

//用樹實現並查集

291//

並查集節點型別

292 typedef struct

ufstree;

297//

初始化並查集

298void make_set(ufstree t,int

n)299

306}

307//

查詢乙個元素所在的集合

308int find_set(ufstree t,int

x)309

315//將兩個元素所在的集合合併

316void union(ufstree t,int x,int

y)317

328 }

二叉樹相關演算法 二

leetcode 437.path sum iii 第乙個想法就是遍歷二叉樹,找出每個節點的可能性。這個思路時間複雜度為o n 2 private int num public intpathsum treenode root,int sum private void recur treenode ...

二叉樹相關演算法

節點 class node t public node t left public node t right public node t value,node t left,node t right public node t value this value,null null 二叉樹 前中後深度...

二叉樹相關

1.首先建立乙個樹節點,節點有值,左節點和右節點 author 張夢楠 title package description date 2018 5 2519 27 blog www.itzmn.com 樹的節點類 public class treenode public treenode int v...