二叉樹的遞迴與非遞迴遍歷

2021-07-23 09:05:11 字數 1208 閱讀 4782

規則:根左右

//遞迴前序遍歷 

void preorder(bintree *root)     

}

//非遞迴前序遍歷 

//思路

/*(1)訪問結點p,並將結點p入棧,輸出p節點的值;

(2)判斷結點p的左孩子是否為空,

若為空,則取棧頂結點並進行出棧操作,並將棧頂結點的右孩子置為當前的結點p

若不為空,則將p的左孩子置為當前的結點p

(3)迴圈至(1-2)直到p為null並且棧為空,則遍歷結束。

*/void preorder(bintree *root)

else

}}

規則:左根右

//遞迴中序遍歷

void midorder(bintree *root)

}

//非遞迴中序遍歷

/*思路

(1)訪問結點p,並將結點p入棧;

(2)判斷結點p的左孩子是否為空,

若為空,輸出p節點的值,且取棧頂結點並進行出棧操作,並將棧頂結點的右孩子置為當前的結點p

若不為空,則將p的左孩子置為當前的結點p

(3)迴圈至(1-2)直到p為null並且棧為空,則遍歷結束。

*/void midorder(bintree *root)

else

}}

規則:左右根

//遞迴後序遍歷

void afterorder(bintree *root)

}

//非遞迴後序遍歷

/*思路

(1)首先對於任一結點p,先將其入棧。

(2)對應節點p

若不存在左孩子和右孩子,則可以直接訪問它;

若存在左孩子或者右孩子,但是其左孩子和右孩子都已遍歷過,則直接訪問它

否則,則將p的右孩子和左孩子依次入棧

(3)迴圈至(1-2)直到棧為空,則遍歷結束。

*/void afterorder(bintree *root)

else

if(p->lchild)}}

}

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遞迴遍歷與非遞迴遍歷 include include include 本程式實現二叉樹的建立,遞迴遍歷與非遞迴遍歷 typedef struct tnode tnode,pnode 構造二叉樹 pnode createtree else pnode data data pnode lchil...

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遍歷有遞迴與非遞迴兩種方式,但思想大致相同 前序 先列印然後遍歷完他的左子樹,左子樹為空時開始返回,並且開始以棧中元素為根遍歷右子樹 中序 先遍歷左子樹然後左子樹入棧,左子樹為空再列印,再遍歷右子樹 後序 先遍歷完左子樹,左子樹入棧儲存,再遍歷右子樹,遍歷完列印,否則繼續入棧 遞迴遍歷 遞迴...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...