劍指38.二叉樹的深度
阿新 • • 發佈:2020-08-23
題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。思路
思路1:採用遞迴實現。樹的深度=max(左子樹深度,右子樹深度)+1。 思路2:層序遍歷。解法1
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { publicint TreeDepth(TreeNode root) { if (root == null) return 0; // 分別得到root左右孩子的深度 int left = TreeDepth(root.left); int right = TreeDepth(root.right); return Math.max(left,right) + 1; } }
解法2
import java.util.*; //BFS的層次遍歷思想,記錄二叉樹的層數, //遍歷完,層數即為最大深度 publicclass Solution { public int TreeDepth(TreeNode root) { if(root == null) return 0; int depth = 0; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ int levelNums = queue.size();//先獲取本層的節點數,然後遍歷 depth++;for(int i = 0; i < levelNums; i++){ TreeNode cur = queue.poll(); if(cur.left != null) queue.offer(cur.left); if(cur.right != null) queue.offer(cur.right); } } return depth; } }