劍指Offer經典算法題

                                                        劍指Offer經典算法題

         本文由博主經過查閱網上資料整理總結後編寫,如存在錯誤或不恰當之處請留言以便更正,內容僅供大家參考學習。


題目描述

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

思路:遞歸思想判斷每個節點的左右子樹高度差是否滿足不大於1。

class Solution {
public:
    //遍歷每個結點,根據該結點的左右子樹高度差判斷是否平衡,然後遞歸地對左右子樹進行是否平衡判斷。
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if(!pRoot) return true ;
        int leftHigh=getHigh(pRoot->left);
        int rightHigh=getHigh(pRoot->right);
        if(leftHigh>rightHigh+1||rightHigh>leftHigh+1) {
            return false;
        }else 
            return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);
    }
    // 求得結點的最大高度值
    int getHigh(TreeNode* pRoot){
        if(!pRoot) return 0;
        return max(getHigh(pRoot->left),getHigh(pRoot->right))+1;
    }
};

題目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

思路:
1.需利用邏輯與的短路特性實現遞歸終止。
2.當n==0時,ans&&(sum+=Sum_Solution(n-1))只執行前面的判斷,爲false,然後直接返回0;
3.當n>0時,執行sum+=Sum_Solution(n-1),實現遞歸計算Sum_Solution(n)。

class Solution {
public:
    int Sum_Solution(int n) {
        int ans = n;
        ans && (ans += Sum_Solution(n - 1));
        return ans;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章