二叉樹的遍歷演算法

2021-10-10 10:08:00 字數 1174 閱讀 8393

二叉樹的遍歷

二叉鍊錶

typedef

struct btnode btnode,

*bintree;

三叉鍊錶
typedef

struct btnode btnode,

*bintree;

二叉鍊錶和三叉鍊錶都是用來描繪二叉樹的!!

一、層序遍歷

void

levelorder

(bintree bt)

}}

//#define maxsize 1024

void

levelqueue

(bintree bt)

}}

二、先序遍歷

遞迴

void

preorder

(bintree bt)

}

非遞迴

因為棧是後進先出,所以最後進去的棧是二叉樹最近的根結點,第一次進入左子樹需要進棧,第二次訪問右子樹的時候,則需要出棧。無論是訪問左子樹還是右子樹,都需要找到其雙親結點才能訪問,因此棧只是用來記錄雙親結點的順序。

void

preorder

(bintree bt, visitfunc visit)

else

}}

void

preorder

(bintree bt)

}}

三、中序遍歷

遞迴

void

inorder

(bintree bt)

}

非遞迴

void

inorder

(bintree bt)

else

}}

四、後續遍歷

遞迴

void

postorder

(bintree bt)

}

非遞迴

void

postorder

(bintree t)

else

else}}

}

二叉樹遍歷演算法

二叉樹是一種非線性的資料結構,在對它進行操作時,總是需要逐一對每個資料元素實施操作,這樣就存在乙個操作順序問題,由此提出了二叉樹的遍歷操作。所謂遍歷二叉樹就是按某種順序訪問二叉樹中的每個結點一次且僅一次的過程。這裡的訪問可以是輸出 比較 更新 檢視元素內容等等各種操作。在這裡寫了個二叉樹遍歷演算法 ...

二叉樹的遍歷演算法

遞迴演算法 void pre root 先序遍歷非遞迴演算法 void pre2 root if s.isempty 中序遍歷非遞迴 void pre2 root if s.isempty 中序遍歷的程式設計題 後序遍歷非遞迴 借助兩個棧來實現 void post if root null retu...

廣度遍歷二叉樹和深度遍歷二叉樹演算法

二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...