題目:輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
思路:所謂的深度是指從根結點到葉子結點的最長的路徑的長度,即路徑上的結點的數目。分析問題,輸入根結點root,求它的深度需要先求出root左右子樹的深度,取其較大值,然後加1就是當前樹的深度了,即顯然這是一個對二叉樹後序遍曆進行改編的遞迴過程,設計一個遞迴函式,輸入個結點root,返回這個根結所在的樹的深度。
遞推關係是:
leftDepth=this.process(root.left);
rightDepth=this.process(root.right);
returnMath.max(leftDepth, rightDepth)+1;
邊界條件:
If(root==null)return 0;
即對於空子樹結點,顯然它的深度是已知的,為0,最為邊界條件或者初始條件。
這是一個基本的遞迴函式構造過程,很簡單,只有一個傳回值。
//求深度,先求左右子樹的深度,再求當前樹的深度。對後序遍曆的遞迴過程進行改造即可
publicclass Solution {
public int TreeDepth(TreeNode root) {
//特殊輸入
if(root==null) return 0;
//調用遞迴函式解決問題
return this.process(root);
}
//設計一個遞迴函式用來求出一棵二叉樹的深度
private int process(TreeNode root){
//遞迴函式的邊界條件
if(root==null) return 0;
//①求左子樹的深度
int leftDepth=this.process(root.left);
//②求右子樹的深度
int rightDepth=this.process(root.right);
//③處理當前結點,求當前樹的深度
intdepth=Math.max(leftDepth,rightDepth)+1;
//返回結果
return depth;
} }