leetcode110平衡二叉樹 C easy

2021-09-26 09:08:44 字數 1127 閱讀 3530

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

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

乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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 。

思路:根據平衡二叉樹的定義,遞迴求左右子樹是否是平衡二叉樹即可。遞迴思路三步走,第一步:判斷遞迴終止的條件是啥,第二步遞迴的引數傳啥 第三步……

判斷如果左右子樹不是平衡二叉樹,返回false,如果是判斷這棵樹的高度差是否是平衡二叉樹。

c++**如下:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

return res;

}bool isbalanced(treenode* root)

return false;

}};

不過上面的方法有個明顯的問題,就是遞迴重複太多了,重複計算很多次子樹的高度。有點浪費

所以有下面的方法:

方法是如果我們發現子樹不平衡,則不計算具體的深度,而是直接返回-1。那麼優化後的方法為:對於每乙個節點,我們通過方法遞迴獲得左右子樹的深度,如果子樹是平衡的,則返回真實的深度,若不平衡,直接返回-1,此方法時間複雜度o(n),空間複雜度o(h),參見**如下:空間和時間複雜度不是很會算。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

bool isbalanced(treenode* root)

};

參考:

leetcode 110 平衡二叉樹 平衡二叉樹

leetcode 110 平衡二叉樹 平衡二叉樹要求所有節點的左右子樹的高度差小於1,因此,只需在遍歷的時候返回其左右子樹的深度。definition for a binary tree node.public class treenode treenode int val treenode int...

LeetCode110 平衡二叉樹

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

LeetCode 110 平衡二叉樹

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