【LeetCode】剑指 Offer 55 – I. 二叉树的深度 – Go语言题解

导读:本篇文章讲解 【LeetCode】剑指 Offer 55 – I. 二叉树的深度 – Go语言题解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


一、题目描述

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

例如:

给定二叉树 [3,9,20,null,null,15,7]3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3

提示:

节点总数 <= 10000


二、我的题解

要求树的深度,最直接的想法就是深度优先遍历,遍历一层则层数加1。

深度优先遍历有两种写法:递归

以下代码我使用递归来实现。

思路:

输入 maxDepth 函数的 root 指针

  1. 如果 root 为 nil,深度为 0
  2. 如果左右孩子都为 nil ,深度为 1
  3. 如果左孩子为 nil,返回右孩子的深度 +1;如果右孩子为 nil,返回左孩子的深度 +1
  4. 如果左右孩子不为 nil,返回左右孩子较大的深度

遍历到叶子那一层的时候,会返回 1 ,然后每往上一层就加 1,最终返回树的深度。

代码1:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
    if root == nil{
        return 0
    }else if root.Left == nil && root.Right == nil{
        return 1
    }else if root.Left == nil && root.Right != nil{
        return 1 + maxDepth(root.Right)
    }else if root.Right == nil && root.Left != nil{
        return 1 + maxDepth(root.Left)
    }else{
        a := maxDepth(root.Left)
        b := maxDepth(root.Right)
        if a >= b{
            return 1 + a
        }else{
            return 1 + b
        }
    }
}

评判结果:

在这里插入图片描述

实际上,上述代码还可以简化:

代码2:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
    if root == nil{
        return 0
    }else{
        a := maxDepth(root.Left)
        b := maxDepth(root.Right)
        if a >= b{
            return 1 + a
        }else{
            return 1 + b
        }
    }
}

评判结果:

在这里插入图片描述
这个代码和代码 1 的不同点在于,该代码会越过叶子节点那一层,然后在遍历到叶子层的下一层时返回 0 ;而代码 1 会在叶子节点那一层返回,直接返回 1 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118964.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!