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