二叉樹遍歷小記

2021-09-11 21:21:02 字數 1235 閱讀 2068

所謂二叉樹的遍歷,是指按某條搜尋路徑訪問樹中的每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。

由二叉樹的遞迴定義可知,遍歷一顆二叉樹便要決定對根節點n,左子樹l和右子樹r的訪問順序。按照先遍歷左子樹再遍歷右子樹的原則,常見的遍歷次序有先序(nlr),中序(lnr)和後序(lrn)三種遍歷演算法。其中,序指的是根節點在何時被訪問。

核心思想:遞迴(程式呼叫自身的過程)。要清楚,程式的起點一定是最上層的n,l,r(起點是最上層不代表訪問就一定從最上層開始,會從最上層開始掃瞄,發現有遞迴了則進入繼續掃瞄,直到掃瞄到空或者說是掃瞄符合後開始按照遍歷規則確定訪問順序)。每訪問乙個節點,此時這個節點都可能還含有子樹,當判斷出此節點還含有子樹時,並不能直接訪問此節點,要按照常見的那三種訪問方式再在子樹中遍歷。

先序遍歷:(1)訪問根節點;(2)採用先序遞迴遍歷左子樹;(3)採用先序遞迴遍歷右子樹;

(注:每個節點的分支都遵循上述的訪問順序,體現「遞迴呼叫」)

先序遍歷結果:a bdfe cghi

思維過程:(1)先訪問根節點a,

(2)a分為左右兩個子樹,因為是遞迴呼叫,所以左子樹也遵循「先根節點-再左-再右」的順序,所以訪問b節點,

(3)然後訪問d節點,

(4)訪問f節點的時候有分支,同樣遵循「先根節點-再左--再右」的順序,

(5)訪問e節點,此時左邊的大的子樹已經訪問完畢,

(6)然後遵循最後訪問右子樹的順序,訪問右邊大的子樹,右邊大子樹同樣先訪問根節點c,

(7)訪問左子樹g,

(8)因為g的左子樹沒有,所以接下倆訪問g的右子樹h,

(9)最後訪問c的右子樹i

中序遍歷:(1)採用中序遍歷左子樹;(2)訪問根節點;(3)採用中序遍歷右子樹

中序遍歷結果:dbef    a    ghci

後序遍歷:(1)採用後序遞迴遍歷左子樹;(2)採用後序遞迴遍歷右子樹;(3)訪問根節點;

後序遍歷的結果:defb  hgic   a

小結:三種方法遍歷過程中經過節點的路線一樣;只是訪問各個節點的時機不同。

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...

二叉樹遍歷

描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...