劍指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;
}
};