39. (附加)二叉树是不是平衡二叉树(C++版本)
基础版本:
int GetBinaryTreeDepth(BinaryTreeNode* pRoot)
{if (nullptr == pRoot) return 0;int leftTreeDepth = pRoot->pLeft != nullptr ? GetBinaryTreeDepth(pRoot->pLeft) : 0;int rightTreeDepth = pRoot->pRight != nullptr ? GetBinaryTreeDepth(pRoot->pRight) : 0;return (leftTreeDepth > rightTreeDepth) ? (leftTreeDepth + 1) : (rightTreeDepth + 1);
}
bool IsBalanceBinaryTree(BinaryTreeNode* pRoot)
{if (NULL == pRoot) return true;int leftTreeDepth = GetBinaryTreeDepth(pRoot->pRight);int rightTreeDepth = GetBinaryTreeDepth(pRoot->pRight);if (leftTreeDepth - rightTreeDepth > 1 || leftTreeDepth - rightTreeDepth < -1) return false;return IsBalanceBinaryTree(pRoot->pLeft) && IsBalanceBinaryTree(pRoot->pRight);
}
改进版本:
bool IsBalanceBinaryTree(BinaryTreeNode* pRoot, int& depth)
{if (NULL == pRoot){depth = 0;return true;}int leftTreeDepth = 0;int rightTreeDepth = 0;if (!IsBalanceBinaryTree(pRoot->pLeft, leftTreeDepth)) return false;if (!IsBalanceBinaryTree(pRoot->pRight, rightTreeDepth)) return false;if (leftTreeDepth - rightTreeDepth > 1 || leftTreeDepth - rightTreeDepth < -1) return false;depth = 1 + (leftTreeDepth > rightTreeDepth ? leftTreeDepth : rightTreeDepth);return true;
}
bool IsBalanceBinaryTree(BinaryTreeNode* pRoot)
{if (nullptr == pRoot) return true;int depth = 0;return IsBalanceBinaryTree(pRoot, depth);
}
39. (附加)二叉树是不是平衡二叉树(C++版本)相关推荐
- 带父节点的平衡二叉树_学习数据结构--第四章:树与二叉树(平衡二叉树)
第四章:树与二叉树(平衡二叉树) 1.平衡二叉树 平衡二叉树:AVL,任意结点的平衡因子的绝对值不超过一. 平衡因子:左子树高度 - 右子树高度 如上图二叉树,是否是平衡二叉树? 可以把所有结点的平衡 ...
- 剑指offer之判断二叉树是不是平衡二叉树
1 问题 判断二叉树是不是平衡二叉树 平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右 ...
- 带父节点的平衡二叉树_深入理解(二叉树、平衡二叉树、B-Tree、B+Tree )的区别
一.背景 一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash.RTree.FullText.本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树.平衡二叉树.B-Tr ...
- 剑指offer——面试题39:二叉树的深度
剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...
- 二叉树,平衡二叉树,B-Tree,B+Tree,跳表详解
二叉树,平衡二叉树,B-Tree,B+Tree,跳表详解 1.二叉查找树(BST) 1.1 二叉查找树概念 1.2 二叉查找树特点 2. 平衡二叉树(AVL) 2.1 平衡二叉树概念 2.2 平衡二叉 ...
- 浅谈mysql 平衡二叉树理解_浅析二分查找,二叉树,平衡二叉树,B树,B+树
二分查找 二分查找是最基本的,后面的二叉树,平衡二叉树,B树,B+树都是基于二分查找演变而来的. 二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个 ...
- 二叉树、平衡二叉树、完全二叉树、满二叉树
基本概念 结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层. 二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度. 二叉树 在计算机科学中,二叉树是每个结点最多有两个子 ...
- C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)
目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...
- 关于排序二叉树和平衡二叉树的基础知识
关于排序二叉树和平衡二叉树的基础知识 摘要:这篇文章主要对排序二叉树和平衡二叉树的基础知识进行简要的说明,关于二叉树的详细笔记将在数据结构的学习中进行记录,这里只进行基础知识的了解. 1.排序二叉 ...
- 数据结构—树与二叉树(Part Ⅵ)——平衡二叉树哈夫曼树
目录 平衡二叉树 平衡二叉树的定义 平衡二叉树的插入 LL型 RR型 代码思路 LR型 RL型 哈夫曼树和哈夫曼编码 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的结点类型 哈夫曼树构造的算法 哈夫曼编码 ...
最新文章
- 这可能是程序员学习大数据架构师的最佳之路!另附送1024G学习资料!
- 记计算机三级网络技术考试经历(附题库)
- wireshark远程抓包
- Linux中批量创建空白文件,在Linux中批量创建和修改文件或目录
- php快废了,PHP为什么要逐渐废弃一些函数?出于什么原因呢?
- Facebook在欧洲推出网络极端内容与仇恨言论打压行动
- Keil5 software packs和legacy device database分类讲解
- python内置函数map_python内置函数 map/reduce
- Oracle中查询rownum和rowid的区别
- 第十章:XAML标记扩展(三)
- maven编译spark源码
- RiruEdxposed学习研究(四)Magisk(面具)源码下载编译详细实战教程
- 项目管理学习总结(19)——一百人研发团队的难题:研发管理、绩效考核、组织文化和OKR
- java茌首字母_汉字获取拼音首字母(1)
- BT软件系统包含哪些部分?BT技术如何突破运营商的封锁?
- [单片机] KeilC51单块数码管演示与原理
- 彻底关闭Windows10自动更新的详细解决方案
- 多糖水凝胶的交联方式及分析方法
- 以太网详解(四)-网口硬件测试指南
- Linux之xinetd安装及实践
热门文章
- 查看各浏览器各版本的兼容情况
- python中dump与dumps的区别
- DevExpress v18.1新版亮点——WPF篇(一)
- 如何学好C和C++?怎么学习C/C++?学习C和C++的技巧是什么?
- Docker结合Consul实现的服务发现(一)
- MySQL 指定各分区路径
- classloader隔离练习
- ActionFilterAttribute
- ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]
- Solaris 10 的基本操作