c 二叉查詢樹 非遞迴(先序 中序 後序)遍歷

2021-08-22 12:21:34 字數 1055 閱讀 7836

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...