二叉樹的基本運算

2022-07-08 02:21:09 字數 4195 閱讀 7660

編寫乙個程式實現二叉樹的基本功能:

1、使用者輸入字串建立二叉樹,a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))

2、(1)實現二叉樹的各種遍歷。包括先序遍歷、中序遍歷、後序遍歷的歸和非遞迴演算法、以及層次遍歷。

(2)要求能查詢任一結點在某種遍歷序列中的前驅和後繼。

(3)查詢輸出從根結點a出發到任意指定結點的路徑。

(4)查詢任意乙個節點為根的子樹所有節點。

1 #include2 #include3 #include4 #include5 #include6 #include7

8using

namespace

std;910

const

int maxn=1e5+7;11

struct

edge;

16 stackst;

17 queuesq;

18string

s;19

/*20

構造二叉樹

21*/

22void build_tree(edge* &tree,string

str)

44else50}

51}52 i++;53}

54}55/*

56銷毀二叉樹

57*/

58void destry_tree(edge* &tree)64}

65/*

66先序遍歷,遞迴

67*/

68void printtree_first(edge*tree)

75if(tree->right!=null)78}

79}80/*

81先序遍歷,非遞迴

82*/

83void printtree_first1(edge*tree)

94if(!st.empty())99}

100}

101/*

102中序遍歷,遞迴

103*/

104void printtree_center(edge*tree)

110 cout<

111if(tree->right!=null)

114return

;115

}116

return

;117

}118

/*119

中序遍歷,非遞迴

120*/

121void printtree_center1(edge*tree)

130if(!st.empty())

137}

138}

139/*

140後續遍歷,遞迴

141*/

142void printtree_last(edge*tree)

148if(tree->right!=null)

151 cout<

152}

153}

154/*

155後續遍歷,非遞迴

156*/

157void printtree_last1(edge*tree)

167 r=null;

168 f=1

;169

while (!st.empty()&&f)

170178

else

182}

183 }while (!st.empty());

184}

185/*

186層次遍歷演算法

187*/

188void deporder(edge*tree)

200if(p->right !=null)

203}

204}

205/*

206207

求節點前驅後繼

208209

*/210 queueq;

211/*

212先序遍歷求前驅後繼

213*/

214void printtree_first2(edge*tree)

221if(tree->right!=null)

224}

225}

226/*

227中序遍歷求前驅後繼

228*/

229void printtree_center2(edge*tree)q.push(s);

235if(tree->right!=null)

238}

239}

240/*

241後序遍歷求前驅後繼

242*/

243void printtree_last2(edge*tree)

249if(tree->right!=null)

252q.push(s);

253}

254}

255/*

256前驅跟後繼

257*/

258void getq(char

c)268

else

269272 cout

last=

"<

273}

274if(q.empty())break

;275 front=q.front();

276q.pop();

277}

278}

279/*

280樹搜

281*/

282 stackst;

283/*

284查詢a節點到x節點的路徑並儲存在棧st中

285*/

286void findx(edge* tree,char x,bool &flag)

290if(tree!=null)

297st.push(s);

298if(tree->left!=null)

302if(tree->right!=null)

306}

307}

308/*

309列印路徑

310*/

311void

printx()

318for(int i=0;i1;i++)

321 cout<1]<

322}

323/*

324輸出子樹

325*/

326/*

327輸出左子樹

328*/

329 edge* leftnode(edge*p)

332/*

333輸出右子樹

334*/

335 edge* rightnode(edge*p)

338/*

339列印二叉樹

340*/

341void printbt(edge* p,char x,bool

flag)

351else

if(x==s2)

355else

360else

return

;361

}362

}363

}364

else

375else

return

;376

}377

}378

}379

intmain()

396else

if(c=='b'

)400

else

if(c=='c'

)404

else

if(c=='d'

)412

else

if(c=='e'

)420

else

if(c=='f'

)428

else

if(c=='g'

)438

else

441}

442else

if(c=='h'

)449

}450

return0;

451 }

view code

**僅供學習使用,嚴禁商用,違者必究

二叉樹 基本運算

一 括號表示法建二叉樹 核心 void make btree print b view code 二 查詢節點 核心 btnode find node btnode b1,char x 查詢節點數值等於x的節點 view code 三 求樹高 核心 int get high const btnode...

二叉樹的基本運算

今天資料結構實驗課,做實驗,二叉樹的基本運算,題目要求挺長的,上課坐著沒事幹,寫了一點,放這以後還能看看。呵呵 題目要求 問題描述 建立一棵二叉樹,試程式設計實現二叉樹的如下基本操作 1.按先序序列構造一棵二叉鍊錶表示的二叉樹t 2.對這棵二叉樹進行遍歷 先序 中序 後序以及層次遍歷,分別輸出結點的...

二叉樹的基本運算

二叉樹的初始化操作。二叉樹的初始化須要將指向二叉樹的根結點指標置為空 void initbittree bitree t 二叉樹的初始化操作 二叉樹的銷毀操作。假設二叉樹存在。將二叉樹儲存空間釋放 void destroybittree bitree t 銷毀二叉樹操作 建立二叉樹操作。依據二叉樹的...