資料結構 二叉樹中序遍歷(非遞迴)

2021-08-30 08:58:11 字數 618 閱讀 2380

中序遍歷:左-根-右

中序遍歷的非遞迴和前序遍歷的非遞迴很相似,只是前序遍歷是根-左-右,而中序遍歷左-根-右,也就是說,中序遍歷是:先遇到根節點不訪問,而是直接壓入棧,當左路節點為空時,取出左路節點,並訪問左路節點的右子樹。

①若根的左子樹不為空,則將其入棧,並將它的左子樹當成當前根,然後再對當前根進行相同的處理; 

②若當前根的左子樹為空,則取出該節點,而後將的右子樹置為當前節點,看其是否為空; 

③若不為空,則重複以上兩個操作; 

④若為空,則讓該節點出棧,並取出棧頂節點,並將出棧的節點的右子樹置為當前節點,看其是否為空,重複③和④操作;直到當前節點為null且棧為空時,遍歷結束。

void binarytreeinordernonr(btnode* root)//中序遍歷的非遞迴

//2.取出左路節點,並訪問左路節點的右子樹

btnode* top = stacktop(&st);

printf("%c ", top->_data);

stackpop(&st);

cur = top->_right;

} printf("\n");

}

二叉樹中序非遞迴遍歷

definition for a binary tree node.struct treenode class solution else return out 中序非遞迴遍歷de演算法思想 根據中序遍歷的順序,對於任意乙個結點,優先訪問左孩子,再繼續訪問該左孩子的左孩子,然直到遇到左孩子結點為空的...

資料結構 二叉樹的遞迴 非遞迴遍歷

複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...

資料結構 二叉樹遍歷非遞迴實現

資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。以下為三種遍歷方法的非遞迴c實現 include include typedef struct binode binode,bitree typedef...