剑指offer 平衡二叉树
生活随笔
收集整理的這篇文章主要介紹了
剑指offer 平衡二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
?
分析:首先理解什么是平衡二叉樹。平衡二叉樹具有以下性質:它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。
?
很明顯可以用遞歸解決。
解法一:
1 class Solution { 2 public: 3 int depth(TreeNode *pRoot) { 4 if (pRoot == nullptr) { 5 return 0; 6 } 7 int left = depth(pRoot->left); 8 int right = depth(pRoot->right); 9 return max(left, right) + 1; 10 } 11 bool IsBalanced_Solution(TreeNode* pRoot) { 12 if (pRoot == nullptr) { 13 return true; 14 } 15 int left = depth(pRoot->left); 16 int right = depth(pRoot->right); 17 return (abs(left - right) <= 1 && IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right)); 18 } 19 };上述解法的不足在于在計算上層節點的時候,他會反復計算下層節點的深度,增加了時間復雜度,于是有了后序遍歷的解法,先判斷兩個子樹是否為平衡二叉樹,是的話返回深度,否則標記為1.
解法二:后序遍歷
1 class Solution { 2 private: 3 int getdepth(TreeNode *pRoot) { 4 if (pRoot == NULL) { 5 return 0; 6 } 7 int left = getdepth(pRoot->left); 8 if (left == -1) { 9 return -1; 10 } 11 int right = getdepth(pRoot->right); 12 if (right == -1) { 13 return -1; 14 } 15 return abs(left - right) > 1 ? -1 : 1 + max(left, right); 16 } 17 public: 18 bool IsBalanced_Solution(TreeNode* pRoot) { 19 return getdepth(pRoot) != -1; 20 } 21 };?
轉載于:https://www.cnblogs.com/qinduanyinghua/p/10474361.html
總結
以上是生活随笔為你收集整理的剑指offer 平衡二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Python]小甲鱼Python视频第
- 下一篇: 逸周书·谥法解