死磕二叉樹(一)

2022-03-11 15:13:12 字數 1710 閱讀 9422

二叉樹是每個結點最多有兩個子樹的樹結構。

3

/ \4 5

/ \1 2

因為二叉樹的左右子樹都具有類似的結構,二叉樹的題目往往和遞迴是關聯的。

遍歷二叉樹的每乙個點,通常有三種方式,中序,前序,後序的方式,對應上圖的樹來說,結果是:

3 4 1 2 5 // 前序

1 4 2 3 5 // 中序

1 2 4 5 3 // 後序

前、後、中都是相對於根節點的位置來定義的。

首先來看:

94. 二叉樹的中序遍歷

深度優先

通過遞迴的方式很容易構造,關鍵在於如何選出遞迴結束的條件,比如當前節點是空值時,需要return

方法一:

class solution 

void helper(treenode root)}}

方法二:

除了遞迴的方式,還有迭代法,迭代中序遍歷時,需要借助乙個棧,棧的功能是儲存上乙個節點,好讓處理完左子樹的時候,可以回頭訪問根節點,根據這個思路,我們可以在訪問開始前沿著左子樹一路訪問到null,然後再訪問上乙個節點(此時可以看成根節點),最後再訪問右節點:

class solution  else 

}return list;}}

144. 二叉樹的前序遍歷

有了中序遍歷的基礎,前序遍歷的遞迴形式可以很容易的寫出來:

方法一:

class solution 

void helper(treenode root)}}

方法二:

使用迭代法依然時要借助乙個棧來實現,這裡棧的功能和中序遍歷類似,都是要儲存上乙個節點,便於訪問完左子樹後再訪問右子樹。不同的是,訪問下乙個左節點之前,就需要把節點的值儲存到結果中去:

class solution else

}return res;}}

145. 二叉樹的後序遍歷

前序遍歷和後序遍歷之間的的關係:

前序遍歷順序為:根 -> 左 -> 右

後序遍歷順序為:左 -> 右 -> 根

前序遍歷的時候,每個節點的值都會插入到結果鍊錶的尾部res.add(root.val)

如果每次都選擇插入到結果鍊錶的頭部,那麼遍歷順序會變為:右 -> 左 -> 根

此時轉換一下左右子樹的先後順序,就得到我們想要的結果:左 -> 右 -> 根

迭代法:

死磕二叉樹(二)

102.二叉樹的層序遍歷 二叉樹層序遍歷可以借助bfs的思想解決 class solution 拿到這個題目之後,首先看到返回的型別是乙個list 因此在構造返回結果的時候,結果也是按層進行新增的,也就是說,在處理的過程中需要儲存當前訪問的層。構造返回結果 list res new linkedli...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...