首先定義樹的結點,建立樹,再進行樹的遍歷的非遞迴實現
#include#include using namespace std;
//樹節點定義
typedef struct node
bitreenode, *bitree;
//樹的建立
void createbitree(bitree &t)
}//非遞迴實現先序遍歷
void preorder(bitree root)
if(!stacktree.empty()) //最左側結點遍歷完,結點依次出棧,找出存在右孩子的結點
}}//非遞迴實現中序遍歷
void midorder(bitree root)
if(!stacktree.empty())
}}//非遞迴實現二叉樹的後序遍歷
typedef struct stacktreenode
*pstree;
int postorder(bitree root)
else
tmpnode->flag++;
if (tmpnode->treenode->leftchild) //左孩子不為空,後入棧
tmpnode->flag++;
} }return 1;
}
//測試
int main()
二叉樹的非遞迴遍歷(先序,中序,後序)
遍歷演算法 1 中序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 遍歷左子樹 2 訪問根結點 3 遍歷右子樹。2 先序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 訪問根結點 2 遍歷左子樹 3 遍歷右子樹。3 後序遍歷得遞迴演算法定義 若二叉樹非空,則依次執行如下操作 ...
二叉樹的非遞迴先序,中序,後序遍歷
二叉樹的非遞迴遍歷 先序遍歷,中序遍歷,後序遍歷 include include using namespace std typedef struct node binode,bitree 先序遞迴建立樹,這裡注意引數的型別,t的型別是 如果是 稍加改動就ok.void createtree bit...
二叉樹的非遞迴先序 中序 後序遍歷
演算法思想 先序 nlr的訪問順序,由於r節點,即右孩子的訪問需要通過根節點的指標來實現,所以,需要設乙個棧來儲存根節點。具體看 void preorder btree t else while 中序遍歷和先序遍歷幾乎一樣 void midorder btree t else 後序遍歷 lrn順序。...