一.實驗要求
二叉樹的遍歷操作是樹形結構其他眾多操作的基礎。本實驗旨在使學生進一步加深對二叉樹的先序、中序和後序等三種遍歷次序特點的理解,熟悉二叉鍊錶儲存結構,熟練掌握二叉樹上的遞迴演算法的設計技術。
二.實驗題目
構造一棵二叉樹,使用二叉鍊錶方式儲存,試設計程式,按照先序、中序、後序三種方式將這棵二叉樹遍歷出來,要求使用遞迴和非遞迴兩種實現方式。
三.實現提示
1.二叉樹的線性鍊錶儲存資料結構:
[cpp]view plain
copy
typedef
char
elemtype;
typedef
struct
bitreebitree;
2.二叉樹的構造方式(參考):
[cpp]view plain
copy
bitree *create()
rear++;
q[rear]=s; //新結點或虛結點進隊
if(rear==1)
root=s;
else
if(rear%2==1) front++;
//出隊
} cin>>ch;
} return
root;
}
四.思考及選做
1.本實驗給出了建立二叉樹的二叉鍊錶儲存結構的一種方法,是否還有更簡單的方法?
2.對於非遞迴先序遍歷一般需要對每個結點進行二次進棧,這就需要乙個標誌位,如何處理這個標誌位,使得既不需要構造新的儲存結構也不需要增加乙個新的標誌棧。
五.我的實現
[cpp]view plain
copy
#include
#include
#include
#include
using
namespace
std;
/*******************資料結構的定義*************************/
typedef
char
elemtype;
typedef
struct
bitree
bitree;
/**********************功能函式*******************************/
/*建樹. 輸入格式為: a(b,c(d,e))
*/bitree *create(char
*s,bitree *&root)
else
if(s[i]==
',')
else
if(s[i]==
')')
else
if(isalpha(s[i]))
else
if(s[i+1]==
'(')
s1.push(p);
} i++;
}
} /*
遞迴列印函式 。
*/void
display(bitree *root)
if(root->rchild!=null)
} } /*
先序遍歷。遞迴 。
*/void
preorder1(bitree *root)
} /*先序遍歷。非遞迴 。
1)訪問結點p,並將結點p入棧;
2)判斷結點p的左孩子是否為空,若為空,則取棧頂結點並進行出棧操作,並將棧頂結點的右孩子置為當前的結點p,迴圈至1);若不為空,則將p的左孩子置為當前的結點p;
3)直到p為null並且棧為空,則遍歷結束。
*/void
preorder2(bitree *root)
if(!s.empty())
} } /*
中序遍歷。遞迴。
*/void
inorder1(bitree *root)
} /*中序遍歷。非遞迴。
1)若其左孩子不為空,則將p入棧並將p的左孩子置為當前的p,然後對當前結點p再進行相同的處理;
2)若其左孩子為空,則取棧頂元素並進行出棧操作,訪問該棧頂結點,然後將當前的p置為棧頂結點的右孩子;
3)直到p為null並且棧為空則遍歷結束;
*/void
inorder2(bitree *root)
if(!s.empty())
} } /*
後序遍歷 。遞迴。
*/void
postorder1(bitree *root)
} /*後序遍歷 。非遞迴。
要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。
如果p不存在左孩子和右孩子,則可以直接訪問它;或者p存在左孩子或者右孩子,但
是其左孩子和右孩子都已被訪問過了,則同樣可以直接訪問該結點。若非上述兩種情況,
則將p的右孩子和左孩子依次入棧,這樣就保證了每次取棧頂元素的時候,左孩子在右孩
子前面被訪問,左孩子和右孩子都在根結點前面被訪問。
*/void
postorder2(bitree *root)
else
}
} /***********************main函式*************************/
intmain()
return
0;
}
mysql 遍歷二叉樹 資料結構 二叉樹遍歷
這篇博文主要是研究二叉樹遍歷的遞迴與非遞迴演算法,有興趣的小夥伴可以了解下!二叉樹的遞迴遍歷 深度優先遍歷 先來張圖,看看各結點遍歷時的情況 二叉樹深度優先遍歷總結 分別為第一次,第二次,第三次進入某個結點 先序遍歷 先訪問根結點,然後先序遍歷左子樹,最後先序遍歷右子樹 根 左 右 中序遍歷 先中序...
資料結構 遍歷二叉樹
資料結構實驗之二叉樹二 遍歷二叉樹 time limit 1000ms memory limit 65536kb submit statistic problem description 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並按中序和後序的方...
資料結構 遍歷二叉樹
二叉樹的遍歷原理 二叉樹的遍歷是指從根節點出發,按照某種次序以此訪問二叉樹所有節點,使得每個節點被訪問一次且僅被訪問一次 二叉樹遍歷方法 1.前序遍歷 規則是若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹 2.中序遍歷 規則是若樹為空,則空操作返回,否則從根節點開...