剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
一 . 题目分析
首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过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 ;
}
else
{
// 左右递归
int left = getNextDepth(node.left);
int right = getNextDepth(node.right);
// 平衡二叉树的判断条件(左右节点差小于等于1)
if ((left - right) > || (right - left) > )
{
valid = false;
}
// 二叉树深度累加方法,目的用于上一段代码进行深度判断
int res = + System.Math.Max(left, right);
return res;
}
}
}
三 . 用通俗的语言进行代码详解
依旧用举例的方法进行,如下图:

剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)的更多相关文章
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
		剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ... 
- 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
		问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ... 
- 剑指offer(23)二叉搜索树的后序遍历序列
		题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目分析 1.后续遍历我们可以知道,最右边的是根节 ... 
- 【剑指Offer】23、二叉搜索树的后序遍历序列
		题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 对于后续遍历序列,序 ... 
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
		题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ... 
- 剑指Offer的学习笔记(C#篇)-- 反转链表
		题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ... 
- 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
		题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ... 
- 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
		题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ... 
- 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列
		题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ... 
随机推荐
- Allegro PCB中添加汉字
			注明出处:http://www.cnblogs.com/einstein-2014731/p/5650943.html Cadence用起来比AltiumDesigner要麻烦些,但是也更开放,更灵活 ... 
- error:Flash Download failed-“Cortex-M3”,“Programming Algorithm”【转】
			本文转载自:http://www.yfrobot.com/thread-11763-1-1.html 最近安装了KEIL5,在使用KEIL5和JLIN实现在线调试功能时,一定会在Utilities选项 ... 
- Storm worker 并行度等理解
			Storm 调优是非常重要的, 仅次于写出正确的代码, 好在Storm官网上有关于worker executors tasks的介绍, http://storm.incubator.apache.or ... 
- CSS+HTML+JQuery简单菜单
			1. [代码]style <style type="text/css"> body,ul,li,a{ margin:0; paddin ... 
- JS获取首字母
			function pySegSort(arr, empty) { if (!String.prototype.localeCompare) return null; var letters = &qu ... 
- ajax异步上传文件FormDate方式,html支持才可使用
			今天需要做一个头像的预览功能,所以我想到了异步上传文件. 总结几点: 异步上传难点: 文件二进制流如何获取 是否需要设置表单的头,就是content-Type那里.异步,所以无所谓了吧. 其他就差不多 ... 
- CodeForces Div1: 995 D. Game(数学期望)
			Allen and Bessie are playing a simple number game. They both know a function f:{0,1}n→Rf:{0,1}n→R, i ... 
- RPM包构建
			参考资料 https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html-single/RPM_Guide/i ... 
- ACM学习历程—Hihocoder 1178 计数(位运算 && set容器)(hihoCoder挑战赛12)
			时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Rowdark是一个邪恶的魔法师.在他阅读大巫术师Lich的传记时,他发现一类黑魔法来召唤远古生物,鱼丸. 魔法n能召 ... 
- css 跳转电脑分辨率
			因为我们经常在项目中要适配各种屏幕,为了方便前端的开发和测试.我们可以直接把电脑的分辨率调整到需要适配的最小的分辨率,其实还有一种更直接粗暴的方法.直接按F12打开控制台,在收拉浏览器就能看到目前的分 ... 
