/* 遞歸解法 O(n) 1。若是二叉樹爲null,則二叉樹的深度爲0; 2. 若是二叉樹不爲null,則二叉樹的深度=max(左子樹的深度,右子樹的深度)+1; public static int getDepthRec(TreeNode root){ if(root == null){ return 0; } int leftDepth = getDepthRec(root.left); int rightDepth = getDepthRec(root.right); return Math.max(leftDepth,rightDepth)+1; } /* 迭代解法O(n) 基本思想同LevelOrderTravelsal,仍是用一個Queue。 */ public static int getDepth(TreeNode root){ if(root == null){ return 0; } int depth = 0;//深度 int currentLevelNodes = 1;//當前level,node的數量 int nextLevelNodes = 0;//下一層,node的數量 Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()){ TreeNode cur = queue.remove();//從隊頭的位置移除 currentLevelNodes--;//減小當前level node數量 if(cur.left != null)( //若是有左孩子,則加到隊尾 queue.add(cur.left); nextLevelNodes++;//並增長下一層Level Node 的數量 ) if(cur.right != null){//若是有右孩子,加到隊尾 queue.add(cur.right); nextLevelNodes++; } if(currentLevelNodes == 0){//已經遍歷完當前層的全部節點 depth ++; //增長高度 currentLevelNodes = nextLevelNodes;//初始化下一層 nextLevelNodes = 0; } } return depth; }