《劍指offer》之二叉樹的深度
- 2020 年 3 月 13 日
- 筆記
前言
我們今天接著來看一道關於二叉樹的演算法題,關於二叉樹的深度。
題目
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
分析
求該樹的深度,主要就是看最長路徑。比如下圖的深度為5,最長的路徑為34,99,35,64,77
那應該怎麼做?這裡用遞歸,如果當前節點沒有左右節點,就返回當前節點,如果有左右節點,就返回左右節點的,比較左節點和右節點的深度,誰的深度大就返回那個。這樣就可以獲得樹的最大深度啦。
解法
public int TreeDepth(TreeNode root) { if(root==null){ return 0; } int left=TreeDepth(root.left); int right=TreeDepth(root.right); if(left>right){ return left+1; } return right+1; }
上面主要注意的是left+1 和right+1;為什麼要加一呢,因為我們遞歸的出口是當前節點為null ,返回0,為1個節點的話返回1.
測試
測試main方法
public static void main(String[] args) { TreeNode root =new TreeNode(34); root.left=new TreeNode(23); root.right=new TreeNode(99); root.left.left=new TreeNode(1); root.left.right=new TreeNode(27); root.right.left=new TreeNode(35); root.right.left.right=new TreeNode(64); root.right.left.right.right=new TreeNode(77); TreeOperation.show(root); Solution solution= new Solution(); System.out.println(solution.TreeDepth(root)); }