**
二叉樹的非遞歸周遊——前序
**
1.核心思想
①非遞歸,即必須要利用棧來實作;
②前序周遊的順序為,先輸出目前節點資料域的值,再輸出其左子樹上的值,其次為右子樹;
③利用棧的先進後出,先将右子樹存入,再将左子樹存入,出棧時自然先左後右,将這個過程寫入循環,即可實作非遞歸周遊;
2.代碼
①結構體類型
typedef struct Node{
int data;
struct Node *left;
struct Node *right;
}BTNode;
②核心代碼
void Forder(BTNode *root){//傳入一顆二叉樹
BTNode **S=(BTNode**)malloc(N*sizeof(BTNode*));//申請一段空間來存放節點,N為總節點個數(雖然用不完)
int top=-;//棧頂指針初始化
BTNode *p;//接受出棧的節點
S[++top]=root;//先将根節點入棧
while(top!=-){//當棧頂指針為-1時停止,這裡也可用do while結構,個人喜好
p=S[top--];//前序周遊,先出棧
cout<<p->data<<"\t";
if(p->right) S[++top]=p->right;//先進後出,故先存右子女
if(p->left) S[++top]=p->left;
}
free(S);//最後将所申請的空間釋放掉
}
③主函數
int main(void){
int Data[]={,,,,,,,};
BTNode *root=CreateTree(Data,);//參考二叉搜素數的建立
Forder(root);
}
3輸出效果
有疑問歡迎留言讨論………..