1. 程式人生 > 實用技巧 >劍指38.二叉樹的深度

劍指38.二叉樹的深度

題目描述

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

思路

思路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 {
    public
int 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的層次遍歷思想,記錄二叉樹的層數,
//遍歷完,層數即為最大深度
public
class 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; } }