劍指 Offer 55 II 平衡二叉樹

2021-10-16 22:08:47 字數 1595 閱讀 7629

題目描述:

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。

示例1 :

示例2:

限制:

思路:

今天學習了樹形dp,這應該是樹形dp中最簡單的一道題。一般樹形dp都有乙個固定的解題思路。

1.分析可能性:這一步也是最難最重要的一步。就以這個題目為例,分析一棵樹是否是平衡樹,有下面四種情況。

2 列資訊全集:根據第一步的分析,我們可以得出,我們需要的資訊有:是否為平衡樹和樹的高度。這個就是我們每棵樹需要返回的資訊。

3.根據返回的資訊寫出遞迴過程。

具體**:

public

class 平衡二叉樹

}public

static

class

returndata

}public

static returndata process

(treenode root)

returndata leftdate =

process

(root.left);if

(!leftdate.isb)

returndata rightdate =

process

(root.right);if

(!rightdate.isb)

if(math.

abs(leftdate.h - rightdate.h)

>1)

return

newreturndata

(math.

max(leftdate.h, rightdate.h)+1

,true);

}public

boolean

isbalanced

(treenode root)

}

上面**只是為了更好的理解樹形dp,但是只是簡單針對這一道題,最優解如下:

public

boolean

isbalanced

(treenode root)

return math.

abs(

depth

(root.left)

-depth

(root.right)

)<=1&&

isbalanced

(root.left)

&&isbalanced

(root.right);}

public

intdepth

(treenode root)

劍指offer 55 II 平衡二叉樹

題目鏈結 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,nu...

劍指offer55 II 平衡二叉樹

題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 平衡二叉樹 balance tree 的定義是 二叉樹中任意節點的左右子樹的深度相差不超過1。注意是任意節點,並不只是根節點的 左深度 右深度 還有其子樹也必須是平衡二叉樹。從該定義也可知是利用遞迴來解決這個問題。class soluti...

劍指 Offer 55 II 平衡二叉樹

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹 二叉樹中任意節點的左右子樹的深度相差不超過1,則是平衡二叉樹 回顧遞迴求深度的方案,是先求得左右子樹的深度,然後進一步得到當前節點的深度,即先左右子樹,再根節點 可以直接加入乙個全域性變數記錄當前是否平衡,並額外引入乙個邏輯來比較子樹的深度 bfs迭...