1. 程式人生 > >LeetCode——第題:求二叉樹深度

LeetCode——第題:求二叉樹深度

題目:

給定一個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

3

/ \
9 20
/ \
15 7
返回它的最大深度 3 。

程式碼:

package leetCode;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 2018.7.25
 * 二叉樹最大深度
 * @author dhc
 *
 */
public class
OneHundredAndFour {
//遞迴的方法:樹的深度等於1+子樹的最大深度 0ms public static int maxDepth(TreeNode root) { if(root == null) { return 0; } int leftMax = 1 + maxDepth(root.left); int rightMax = 1 + maxDepth(root.right); return leftMax >= rightMax ? leftMax : rightMax; } //層次遍歷的方法:每次遍歷完一層深度加1,需要用一個變數來儲存每層的結點數,(這種方法同樣可以求寬度) 2ms
public static int maxDepth1(TreeNode root) { if(root == null) { return 0; } int length = 1; //當前層結點數 int width = 1; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while
(!queue.isEmpty()) { TreeNode tem = queue.poll(); width--; if(tem.left != null) { queue.offer(tem.left); } if(tem.right != null) { queue.offer(tem.right); } if(width == 0 && queue.size() != 0) { length++; width = queue.size(); } } return length; } public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(1); TreeNode node3 = new TreeNode(1); TreeNode node4 = new TreeNode(1); TreeNode node5 = new TreeNode(1); root.left = node1; root.right = node2; node1.left = node3; node3.left = node4; node2.right = node5; System.out.println(maxDepth1(root)); } }