c++
二叉查詢樹
非遞迴(先序、中序、後序)遍歷
#include
#include
#include
#include
using
namespace std;
typedef
intelemtype;
typedef
struct treet
treet
, *ptreet;
class
bitree;
;ptreet
bitree::insert(elemtype target, ptreet* pp
tree)
if (node->key == target) //不允許出現相同的元素
else if (node->key > target) //向左
else }
void
bitree::preorder(ptreet root)
} void
bitree::lev_order(ptreet root)
}void
bitree::inordernorec(ptreet root)
else }
}void
bitree::preordernorec(ptreet root)
else }
}void
bitree::posordernorec(ptreet root)
//get the top element of the stack
p = st.top
();
//如果p沒有右孩子或者其右孩子剛剛被訪問過
if(p->right == null || p->right == pre)
else }
} 測試**:
#include
#include "tree.h"
#include
#include
void
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...