110 平衡二叉樹

2021-10-19 11:02:37 字數 1773 閱讀 8600

題目描述

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

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

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

示例 1:

輸入:root = [3,9,20,null,null,15,7]

輸出:true

示例 2:

輸入:root = [1,2,2,3,3,null,null,4,4]

輸出:false

示例 3:

輸入:root = 

輸出:true

題解:法一:

自頂向下。

先序遍歷,先判斷根節點所在的子樹是否平衡,然後遞迴判斷左右子樹是否平衡。

時間複雜度:o(n

2)o(n^2)

o(n2)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

bool

isbalanced

(treenode* root)};

/*記憶體:20.4mb,擊敗:87.09%

*/

法二:

自底向上。

方法一中大量重複呼叫height函式,嚴重影響時間效率。考慮後序遍歷,先判斷左右子樹是否平衡,在判斷根節點所在的子樹是否平衡。

時間複雜度:o(n

)o(n)

o(n)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

bool

isbalanced

(treenode* root)};

/*記憶體:20.4mb,擊敗:87.95%

*/

110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,n...

110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回 true 思路 注釋 private boolean isbala...

110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,n...