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

2021-06-13 23:18:28 字數 917 閱讀 2114

1、前序遍歷

void preorder(binarytreenode* t)

if(p->left != null)

}}

這是我目前為止看到的最簡單的前序遍歷**。

2、中序遍歷

void inorder(binarytreenode* t)

if(!s.isempty())

else

}}

3、後序遍歷

struct stknode

void postorder(binarytreenode* t)

currentnode = s.pop();

p = currentnode.ptr;

while(currentnode.tag == 1)//當tag=0時表示左子樹未遍歷完,當tag=1時表示從右子樹回來時可以輸出節點了

else

}currentnode.tag = 1;//從左子樹回來,將tag賦值為1

s.push(currentnode);//開始遍歷右子樹

p = p->right;

}}

後序遍歷應該是四種遍歷中最複雜的乙個了。

4、層序遍歷

void levelorder(binarytreenode* t)

if(p->right != null)

if(!q.isempty())

else

}}

層序遍歷是依賴佇列實現的,其他三種遍歷均需要依賴棧來實現。

這四種遍歷一定要熟記於心,屬於二叉樹的最基本內容。

二叉樹的建立,前序,中序,後序,層序遍歷

二叉樹 binary tree 是另一種樹形結構,它的特點是每個節點至多有兩顆子樹,並且其子樹有左右之分,並且順序不能顛倒。主要用遞迴的思想完成建立,遍歷等操作。binarytree const t arr,const t invalied 傳入乙個順序為前序的陣列,invalied意味節點為nul...

二叉樹的遞迴遍歷 (前序,中序,後序,層序)

首先我們來講前序遍歷。前序遍歷很簡單,首先判斷根樹是否為空 注意前序遍歷的次序是 根 左子樹 右子樹 如此遞迴呼叫。以下為 templatevoid bitree preorder binode bt 中序遍歷是實際問題中經常使用的一種遍歷。其 形式與前序遍歷很相似,其遍歷順序為 左子樹 根 右子樹...

二叉樹的非遞迴遍歷(前序,中序,後序,層序)

廢話不多說,直接上 有問題歡迎提出 前序遍歷非遞迴 void binarytreeprevordernonr treenode root stackstack new stack treenode node root while node null stack.empty node stack.po...