編寫乙個程式實現二叉樹的基本功能:
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 #include7view code8using
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 }
**僅供學習使用,嚴禁商用,違者必究
二叉樹 基本運算
一 括號表示法建二叉樹 核心 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 銷毀二叉樹操作 建立二叉樹操作。依據二叉樹的...