前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)

剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)

作者头像
WeiMLing
发布2019-08-23 19:49:05
4860
发布2019-08-23 19:49:05
举报
文章被收录于专栏:WeiMLingWeiMLingWeiMLing

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

一 . 题目分析

首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树。如下图:

所以,知道了这个概念之后,回归题目。判断该二叉树是不是平衡二叉树,就要在二叉树每个节点的深度来搞了,肯定要对二叉树进行遍历,但是如何效率最大化,如果从小往上遍历,一次遍历是否可以完成任务,而从下往上的遍历又让我想到了二叉树唯一的一种自下而上的遍历方法(我说的仅是前后根三种之中而已)。

解决方案与关键词:

1 . 二叉树自下而上遍历一次:后序遍历,左右根

2 . 二叉树平衡判断条件:每个根节点深度绝对值小于等于1

3 . 二叉树每个根节点的深度累加:递归实现

二 . 代码实现

class Solution
{
    public bool IsBalanced_Solution(TreeNode pRoot)
    {
        // write code here
        // 若为空树,返回正确
        if (pRoot == null)
            return true;
        // 递归函数
        getNextDepth(pRoot);
        // 最终结果
        return valid;
    }
    // 定义一个初始值假设该树是平衡二叉树
    bool valid = true;
    private int getNextDepth(TreeNode node)
    {
        // 若为空树,判断深度
        if (node == null)
        {
            return 0;
        }
        else
        {
            // 左右递归
            int left = getNextDepth(node.left);
            int right = getNextDepth(node.right);
            // 平衡二叉树的判断条件(左右节点差小于等于1)
            if ((left - right) > 1 || (right - left) > 1)
            {
                valid = false;
            }
            // 二叉树深度累加方法,目的用于上一段代码进行深度判断
            int res = 1 + System.Math.Max(left, right);
            return res;
        }
    }
}

三 . 用通俗的语言进行代码详解

依旧用举例的方法进行,如下图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
      • 一 . 题目分析
        • 二 . 代码实现
          • 三 . 用通俗的语言进行代码详解
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档