二叉树的深度

题目描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

时间限制:1秒 空间限制:32768K

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/

解题思路

1、深度遍历:使用队列遍历,同时计数

import java.util.LinkedList;
import java.util.Queue;
public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root==null) return 0;
        Queue queue=new LinkedList<>();
        queue.offer(root);
        int count=0;
        while(!queue.isEmpty()){
            for(int i=0;i

类似题目:给定二叉树,求二叉树每层的平均数

public class Solution{
    public ArrayList TreeDepth(TreeNode root) {
        LinkedList queue=new LinkedList<>();
        ArrayList result=new ArrayList<>();
        queue.offer(p);
        while(!queue.isEmpty()) {
            double sum=0;
            int count=queue.size();
            for(int i=0;i

2、使用递归:直接返回左右子树种最大深度值+1,依次递归

分析:

  • 递归条件:当前结点的深度=左右子树结点的最大深度+1
  • 递归出口:当前结点为空时,返回0;
public class Solution {
    public int TreeDepth(TreeNode root) {
        if(root==null) return 0;
        int left=TreeDepth(root.left);
        int right=TreeDepth(root.right);
        return left>right?left+1:right+1;
    }
}

类似题目:给定二叉树,判断是否是二叉平衡树。参考leetcode的110题

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        if(treedepth(root)==-1) return false;
        return true;
    }
    public int treedepth(TreeNode root){
        if(root==null) return 0;//结点为null直接返回0
        int left=treedepth(root.left);//左子树的深度
        int right=treedepth(root.right);//右子树的深度
        int dif=left-right;//计算平衡因子
        if(dif>1||dif<-1||left==-1||right==-1) return -1;
        return left>right?left+1:right+1;
    }
}

你可能感兴趣的:(二叉树的深度)