前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔试面试题目:平衡二叉树的判断

笔试面试题目:平衡二叉树的判断

作者头像
C you again
发布2021-04-22 15:37:45
4650
发布2021-04-22 15:37:45
举报
文章被收录于专栏:IT技术圈

一. 前面的话

学如逆水行舟,不进则退。心如平原野马,易放难收。春节假期,基本结束,是该回归正常的节奏了。

生活和工作,需要平衡。紧张和松弛,亦需平衡。今天,我们来聊一个笔试面试题目:平衡二叉树的判断。

这个问题很简单,写点代码玩一下,一来是找回代码的感觉,二来是找回工作状态的感觉,经leetcode测试无误。

二. 平衡二叉树的判断

平衡二叉树,是非常基础的内容。在数据结构中,经常用到的红黑树,便是基于平衡二叉树而言的,它有很多优良的性质。那么,到底什么是平衡二叉树呢?且看leetcode题目:

那么,怎么判断一颗二叉树是否为平衡二叉树呢?直接根据上述定义判断就行。具体来说,就是:

  • 空树是平衡二叉树
  • 左右子树都是平衡二叉树
  • 左右子树高度之差不大于1

显然,这是一个递归问题,用递归算法即可。顺便说一下,在求二叉树高度时,也是一个递归问题。接下来,可以直接写程序了!当然,在写程序之前,也别着急,阅读原文那里,有一个彩蛋,希望你能看到。

接下来,就是写程序了,练练手,找找感觉,如下:

代码语言:javascript
复制
func isBalanced(root *TreeNode) bool {
    if root == nil {
        return true
    }

    gap := getAbs(treeHeight(root.Left) - treeHeight(root.Right))
    if isBalanced(root.Left) && isBalanced(root.Right) && gap <= 1 {
        return true
    }

    return false
}

func treeHeight(root *TreeNode) int {
    if root == nil {
        return 0
    }

    if root.Left == nil && root.Right == nil {
        return 1
    }

    if root.Left == nil {
        return treeHeight(root.Right) + 1
    }

    if root.Right == nil {
        return treeHeight(root.Left) + 1
    }

    return getMax(treeHeight(root.Left), treeHeight(root.Right)) + 1
}

func getMax(x, y int) int {
    if x > y {
        return x
    }

    return y
}

func getAbs(x int) int {
    if x < 0 {
        return -x
    }

    return x
}

经在leetcode上进行自测,正确无误,符合预期。

三. 最后的话

这篇文章很简单,就当是从春节假期到工作的一个过渡文章吧。再次,祝大家生活工作平衡,就像本文所说的平衡二叉树一样。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C you again 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 前面的话
  • 二. 平衡二叉树的判断
  • 三. 最后的话
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档