我們在實現二叉搜尋樹的先中後序遍歷是一般的都是遞迴的來實現的,現在我們要實現其非遞迴的版本,核心思想是利用棧來模擬遞迴中的函式呼叫,自己來實現模擬遞迴我們先來實現先序遍歷————————————
void preordernotrecursion(binarysearchtree bst)//二叉查詢數的非遞迴版先序遍歷
}然後實現中序遍歷————————————————
void inordernotrecursion(binarysearchtree bst)//二叉查詢數的非遞迴版中序遍歷,利用棧來模擬函式遞迴呼叫
while(!s.empty())}}
}最後給出後序遍歷,在這三個遍歷中非遞迴後序遍歷最難實現涉及到棧內的節點的二次訪問控制————————
void postordernotrecursion(binarysearchtree bst)//二叉查詢數的非遞迴版後序遍歷
while(!s.empty())
else if(rchild_visited.find(pos) == rchild_visited.end())
}else if(rchild_visited.find(pos) != rchild_visited.end())
}}
二叉樹的遍歷(遞迴)先中後序
儲存結構 二叉樹的儲存結構有兩種 順序儲存結構和鏈式儲存結構,由於順序儲存結構存在的很大的侷限性,所以我們以鏈式儲存結構講解為主。data域用於儲存對應的資料元素,lchild和rchild分別表示左指標和右指標域,分別用於儲存左孩子和右孩子結點的位置,這種儲存結構又稱為二叉鍊錶儲存結構。下面給出結...
二叉樹的非遞迴遍歷(先序,中序,後序)
遍歷演算法 1 中序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 遍歷左子樹 2 訪問根結點 3 遍歷右子樹。2 先序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 訪問根結點 2 遍歷左子樹 3 遍歷右子樹。3 後序遍歷得遞迴演算法定義 若二叉樹非空,則依次執行如下操作 ...
二叉樹的非遞迴先序,中序,後序遍歷
二叉樹的非遞迴遍歷 先序遍歷,中序遍歷,後序遍歷 include include using namespace std typedef struct node binode,bitree 先序遞迴建立樹,這裡注意引數的型別,t的型別是 如果是 稍加改動就ok.void createtree bit...