二叉樹的遍歷是指從根結點出發,按照某種次序依次訪問樹中所有結點,使得每個結點被訪問依次且僅被訪問一次。
其中訪問代表對該結點的資料的操作,這裡我們可以認為就是直接列印該結點的資料。
二叉樹遍歷演算法的基礎是遞迴。
若二叉樹為空,則空操作返回。否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹。
先訪問,再左子樹,再右子樹。
前序遍歷演算法
public
void
preorder(nodenode) else
}
遍歷結果是:a b d g h c e i f
演算法解析:
1、首先判斷是否為空樹,不為空(根節點不為空),則執行system.out.println(node.data);列印出a。
2、接下來在a結點上遞迴呼叫執行preorder(node.lchild);訪問根節點a的左孩子b,不為null,則system.out.println(node.data)列印顯示字母b
3、在b結點上遞迴呼叫preorder(node.lchild);訪問結點d,d結點不為空,列印顯示d
4、在d結點上遞迴呼叫preorder(node.lchild);訪問結點h,h不為空,輸出列印h
4、在h結點上遞迴呼叫preorder(node.lchild);h左子樹為空,h結點上的preorder(node.lchild);這行**返回
5、執行h結點上的preorder(node.rchild);,訪問h結點的右結點k,k不為空,輸出列印k
6、在k上遞迴呼叫preorder(node.lchild);為空返歸,
7、在k上遞迴呼叫preorder(node.rchild);為空返回到h結點,
8、h結點的preorder(node.rchild);這行**返回了,則h結點的**執行完畢,返回到d結點
9、d結點的preorder(node.lchild);**返回了,呼叫preorder(node.rchild)遍歷d結點的右子樹,右子樹為空,返回;
10、返回到b結點,b結點呼叫preorder(node.rchild);訪問b結點的右子樹e,e不為空,輸出列印e
11、在e結點上遞迴呼叫preorder(node.lchild);preorder(node.rchild);均為空,返回到b,
12、b結點**執行完畢,返回到a結點,
13、a結點執行preorder(node.rchild);訪問a結點的右子樹c,c不為空,輸出列印c
14、在c結點遞迴呼叫preorder(node.lchild);訪問c的左子樹f,f不為空輸出列印f
15、在f上遞迴呼叫preorder(node.lchild);訪問f的左子樹i,i不為空,輸出列印i
16、在i結點上呼叫preorder(node.lchild);preorder(node.rchild);均為空,返回到結點f
17、結點f呼叫preorder(node.rchild);訪問f結點右子樹,右子樹為空,返回
18、f結點**執行完畢,返回到c結點,c結點呼叫preorder(node.rchild);訪問c結點的右子樹g,g不為空,輸出列印g
19、在g結點上遞迴呼叫preorder(node.lchild);訪問g的左子樹,左子樹為空,返回
20、g結點呼叫preorder(node.rchild);訪問g結點的右子樹j,j不為空,輸出列印j
21、在j上呼叫preorder(node.lchild);preorder(node.rchild);均為空,返回
22、g**執行完畢返回到c,
23、c**執行完畢返回到a,
24、a**執行完畢,整個遍歷結束。
最終輸出結果:
a b d g h c e i f
先左子樹,再訪問,再右子樹。
}遍歷演算法跟前序遍歷相似,其關鍵就是遞迴呼叫,在哪個結點上遞迴,返回到哪個結點。
遍歷輸出結果是:g d h b a e i c f
先右子樹,再左子樹,再訪問
}遍歷演算法同前序、中序。
遍歷輸出結果是: g h d b i e f c a
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹學習之旅(7) 二叉樹遍歷
用到的演算法 1.函式push back,演算法語言裡面的乙個函式名用於在vector容器後面加乙個資料,v.push back val 如 1 c 中的vector標頭檔案裡面就有這個push back函式 2 在vector類中作用為在vector尾部加入乙個資料 3 string中也有這個函式...
二叉樹遍歷(樹)
description 樹和二叉樹基本上都有先序 中序 後序 按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。假定一棵二叉樹乙個結點用乙個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。input 輸入檔案flist.in共兩行,每行是由字母組成的字串 一行...