二叉樹相關演算法(一) 二叉樹的遍歷

2021-10-21 07:30:16 字數 1815 閱讀 1795

遞迴方式會導致每個節點會經過三次,先序是在第一次經過節點時訪問,中序是第二次經過節點時訪問,後序是第三次經過節點時訪問。

其中較為特殊的是葉子節點,左孩子和右孩子都為空,訪問空樹時什麼都不做就返回。

public

static

void

p(node h)

}

(1)利用棧來進行實現,三種演算法在理解的基礎上進行記憶,作為一種模板,以後遇到具體問題,可以稍加改變,但是大致流程需要記住。

(2)看待二叉樹的兩種角度(遞迴與非遞迴)區別:

先將根節點壓入棧中,方便之後進行追蹤

一些規則:

1)彈出就列印

2)如有右孩子,壓入右

3)如有左孩子,壓入左

4)都沒有則什麼都不幹

public

static

void

p(node head)

if(node.left != null)

//左右孩子為空就什麼也不做}}

}

一些規則:1)只要有左邊界就把樹的左邊界從上往下依次壓入棧中

2)當頭節點走到空時,才走第2條邏輯,彈出節點,列印,來到右樹上繼續執行1)-》第i次與第i+1次迴圈。

特別的:對於葉子節點來說,本身就相當於左邊界上的第乙個節點。

注意:

借助這個演算法,區別迴圈與遞迴。

public

static

void

in(node head)

else

}}

頭左右(先壓右,再壓左)

頭右左(先壓左,再壓右)

左右頭(將上乙個序列反轉,即本來是彈出就列印,現在改為壓入另外乙個棧)

}利用佇列來實現:

public

static

void

level

(node head)

//這裡不能用else if,他們不是二選一的情況,對於乙個結點是都要看左右結點

if(node.right != null)

//如果左右孩子都為空,那麼直接進入下一層迴圈,接著彈出隊頭節點

}}

二叉樹學習(一)二叉樹基礎

最近準備學習一下資料結構,二叉樹當然是必須要了解的了。網上看了一些貼子,順便把重要的內容就記下來了,有需要的同學可以看看,入門看很有幫助。1.1 定義 1.2 結點的度 1.3 結點關係 1.4 結點層次 2.1 定義 2.2 二叉樹特點 每個結點最多有兩顆子樹,所以二叉樹中不存在度大於2的結點。左...

二叉樹遍歷相關

紅黑樹也是二叉樹,這裡只是說明對樹的遍歷訪問。插入 查詢 刪除 等操作參看紅黑樹那裡 1 深度優先搜尋 每種都有遞迴和迭代兩種實現 迭代需要借助stack 前序遍歷 10,6,4,8,14,12,16 中序遍歷 4,6,8,10,12,14,16 如果是二叉排序樹就是輸出排序結果了哈 後序遍歷 4,...

構建二叉樹 遍歷二叉樹

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