二叉樹的常用套路1

2021-09-24 21:18:48 字數 1713 閱讀 7719

1. 平衡二叉樹

出自:力扣110

題目描述:

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

示例 1:

給定二叉樹 [3,9,20,null,null,15,7]

3

/ \9 20

/ \

15 7

返回 true 。

示例 2:

給定二叉樹 [1,2,2,3,3,null,null,4,4]

1

/ \2 2

/ \3 3

/ \4 4

返回 false 。

解決套路:

注意:a. 左子樹是平衡二叉樹

b. 右子樹是平衡二叉樹

c. 左右子樹高度不超過1

class solution 

//否則,找左右高度,

int left=getdepth(root.left);

int right=getdepth(root.right);

return (math.abs(left-right)<=1 && isbalanced(root.left) && isbalanced(root.right));

} //獲取左右最大高度

private int getdepth(treenode root)

int left=getdepth(root.left);

int right=getdepth(root.right);

return math.max(left, right)+1;

}}

這種解法同樣適用於:104. 二叉樹的最大深度等等關於二叉樹深度的問題。

2. 二叉樹層次遍歷

出自力扣102

題目描述:

給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:給定二叉樹: [3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回其層次遍歷結果:

[ [3],[9,20],[15,7]]

解題思路:

class solution 

queueque=new linkedlist();

que.add(root);

while(!que.isempty())

list> list=new arraylist<>();

getalldes(list,new arraylist(),root);

for(int i=0;i> list, arraylistal, treenode root)

if(root.left==null && root.right==null)

if(root.left!=null)

if(root.right!=null)

}}

這種解法可以解決257. 二叉樹的所有路徑等等關於路徑的題。

最後宣告:以上演算法不一定是最優的,只是一種解題的固定套路適合解決一大類問題!!!

二叉樹 二叉樹

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

二叉樹 48 二叉樹 二叉樹的高度

目的 使用c 模板設計並逐步完善二叉樹的抽象資料型別 adt 內容 1 請參照鍊錶的adt模板,設計二叉樹並逐步完善的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材 課件,以及網盤中的鍊錶...