二叉樹做題總結

2021-10-04 23:51:46 字數 1644 閱讀 1601

做了12道二叉樹的題,按照自己的理解分類

二叉搜尋樹中序遍歷數值是遞增的
leetcode98. 驗證二叉搜尋樹 (利用二叉搜尋樹中序遍歷性質)

leetcode538. 把二叉搜尋樹轉換為累加樹 (利用二叉搜尋樹中序遍歷性質)

leetcode108. 將有序陣列轉換為二叉搜尋樹

leetcode543. 二叉樹的直徑

一棵樹任意兩個節點都有其公共祖先,求最長直徑就相當於找那個節點的左右孩子的深度之和最大。

後序遍歷整棵樹,求每個節點的左右孩子的深度之和,記錄最大的那個,最終結果還要加1,即公共祖先本身。

leetcode617. 合併二叉樹

同時遍歷兩棵樹,根據兩個根節點是否為空,合併兩個節點,根節點的左右孩子遞迴重複此過程,並將新的左右孩子賦值給根節點。

leetcode101. 對稱二叉樹

對稱二叉樹只是已根節點為中心,左右子樹對稱,左右子樹自身並不是對稱二叉樹

新建乙個方法,判斷兩個節點是否相同,若相同遞迴判斷直到遇到葉子節點,若不相同直接返回false。

leetcode226. 翻轉二叉樹

新建乙個臨時節點,像交換兩個陣列元素一樣,交換左右孩子,然後遞迴左右孩子。

leetcode94. 二叉樹的中序遍歷

迭代思路:左孩子存在則把左孩子一直壓入直到沒有左孩子,彈出棧頂結點,然後看右孩子的情況。

若當前變數cur不為空,則壓入棧,把cur的左孩子賦值給cur,重複此過程直到cur指向為空。若cur指向空,彈出棧頂結點tmp,將tmp的val加入集合list,然後把cur指向tmp的右孩子,接著從頭開始判斷cur是否為空。當棧為空並且cur指向的也是空說明已經遍歷了所有的節點。

leetcode144. 二叉樹的前序遍歷

leetcode107. 二叉樹的層次遍歷 ii

leetcode103. 二叉樹的鋸齒形層次遍歷

最後乙個提步直到怎麼分類:

leetcode114. 二叉樹展開為鍊錶

二叉樹的深度

public

intprocess

(treenode root)

int left =

process

(root.left)

;int right =

process

(root.right)

;return

math

.max

(left,right)+1

;}

迭代遍歷二叉樹

使用棧把遍歷過的結點壓入棧,通過改變list.add(cur.val)的位置,實現非遞迴前序遍歷和中序遍歷。

stack

<

integer

>

stack =

newstack

<

>()

;nodetree cur = root;

while

(!stack.

isempty()

|| cur !=

null

) cur = stack.

pop();

//這兩次對cur的賦值,把右孩子壓入棧

cur = cur.right;

}

二叉樹總結

二叉樹遍歷總結 已知一棵二叉樹的前根序序列和中根序序列,構造該二叉樹的過程如下 1.根據前根序序列的第乙個元素建立根結點 2.在中根序序列中找到該元素,確定根結點的左右子樹的中根序序列 3.在前根序序列中確定左右子樹的前根序序列 4.由左子樹的前根序序列和中根序序列建立左子樹 5.由右子樹的前根序序...

二叉樹 二叉樹

題目描述 如上所示,由正整數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...