• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

题目描述

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

一 . 题目分析

        首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过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;
        }
    }
}

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# 使用Win32 API模拟键盘鼠标操作网页发布时间:2022-07-13
下一篇:
C#将数组拼接为字符串string.Join的使用发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap