問題(1)二叉樹的深度
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的/結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
問題(2)平衡二叉樹
輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。
問題(1)分析
第乙個問題對大家都小意思啦,樹的深度=max(左子樹深度,右子樹深度)+1,採用遞迴實現。
問題(2)分析
同樣需要計算樹的深度,樹的深度=max(左子樹深度,右子樹深度)+1。
在遍歷過程中,需要判斷左右子樹深度相差是否超過1,如果不平衡,則令樹的深度=-1。最終根據樹的深度是否等於-1來確定該樹是不是平衡樹。
問題(1)
public int treedepth(node root)
int left=treedepth(root.left);
int right=treedepth(root.right);
return math.max(left+1,right+1);
}
問題(2)
// 主程式
public boolean isbalanced_solution(node root)
public int getdepth(node root)
int left=getdepth(root.left);
if(left==-1)
int right=getdepth(root.right);
if(right==-1)
return math.abs(left - right) > 1 ? -1 : 1 + math.max(left, right);
}
劍指Offer對答如流系列 醜數
我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...
劍指Offer對答如流系列 剪繩子
給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...
劍指Offer對答如流系列 二叉樹的深度
問題 1 二叉樹的深度 輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的 結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。問題 2 平衡二叉樹 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉...