二叉樹的先序 中序 後序遍歷的非遞迴實現

2021-07-04 18:27:05 字數 741 閱讀 9389

首先定義樹的結點,建立樹,再進行樹的遍歷的非遞迴實現

#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順序。...