参考:http://blog.csdn.net/zz198808/article/details/7621275
平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。
问题:判断一个二叉排序树是否是平衡二叉树这里是二叉排序树的定义解决方案:根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。首先编写一个计算二叉树深度的函数,利用递归实现。
package cn.edu.tju.searchTree;
public class TreeDepth {
/*
* 若为空,则其深度为0,若只有一个结点则为1
* 否则,其深度等于左子树和右子树的深度的最大值加1
*/
public int getDepth(TreeNode node){
if(node == null){
return 0;
}else{
return getDepth(node.leftChild) > getDepth(node.rightChild) ? (getDepth(node.leftChild) + 1) :(getDepth(node.rightChild) + 1);
}
}
/*
* getNodeCount:计算二叉树的结点个数
*/
public int getNodeCount(TreeNode node){
if(node == null){
return 0;
}else{
return (getNodeCount(node.leftChild) + getNodeCount(node.rightChild) + 1);
}
}
/*
* isBalance:判断二叉树是否平衡
* 平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:
* 它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。
* 根据平衡二叉树的定义,如果【任意】节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。
*/
public boolean isBalance(TreeNode node){
if(node == null){
return true;
}
int distance = getDepth(node.leftChild) - getDepth(node.rightChild);
if(distance > 1 || distance < -1){
return false;
}else{
return isBalance(node.leftChild) && isBalance(node.rightChild);
}
}
}
分享到:
相关推荐
下面详细介绍给出的代码实现,包括定义二叉树结构、构建二叉树、遍历计算叶子结点数以及计算二叉树深度。 ##### 1. 定义二叉树结构 ```c++ struct node { char data; struct node *lchild, *rchild; } bnode; ...
二叉树是一种在计算机科学中广泛应用的数据结构,它由节点(也称为结点)组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的深度是指从根节点到最远叶节点的最长路径上边的数目,即树的最大层数...
输入节点建立二叉树, 遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ ...二叉树的结点个数是3 Press any key to continue ------------------------------ */
在探讨二叉树的遍历方法及其深度与结点数的计算之前,我们首先简要回顾一下二叉树的基本定义。二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树具有以下特点: 1. **...
0. 建立二叉树(方法0) 1. 建立二叉树(方法1) 2. 统计叶子结点个数 3. 求二叉树的树深
可实现: 输入相应元素,用先序创建二叉树(无元素处用“#”) ... 二叉数的深度: 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树:
该函数首先判断树是否为空,如果为空就返回0,如果不是叶子结点就递归地调用countleaf函数来统计左子树和右子树的叶子结点个数,然后将结果相加。 深度: 树的深度是指从树的根结点到最远叶子结点的距离。在上面的...
数据结构对二叉树结构的C++代码实现,包含基本的建立二叉树,各种方式遍历二叉树,深度计算、结点个数计算等等
利用二叉树的二叉链表存储结构求解二叉树的深度和双分支结点的个数;利用二叉树的二叉链表存储结构实现二叉排序树建树和删除操作。 实验内容: 题一:二叉树采用二叉链表结构表示。设计并实现如下算法:求一棵二叉树...
采用先序法建立一棵二叉树,设计求该二叉树的深度,二叉树的数据域类型为字符型, 扩展二叉树的叶子结点用‘#’表示,要求可以求多棵二叉树的深度,当二叉树的深度为0时程序结束。
深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。 一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大...
本程序通过C++实现了一个简单的二叉树类,支持基本的二叉树操作,包括创建、释放、计算深度以及打印特定层次的节点。这些操作都是通过递归的方式来实现的,递归方法在处理树形结构数据时非常高效且直观。此外,通过...
3 程序所能达到的功能:生成一个新的二叉树,实现对二叉树的先序,中序,后序和层次遍历,计算二叉树的深度,结点数,叶结点数,。 4 测式数据: A生成一个新的二叉树后,直接在键盘上按要求输入字符,可以依次输入...
根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍二叉树中涉及的关键算法,包括统计叶子节点个数、复制二叉树、求解深度等。 ### 一、统计叶子节点个数 在二叉树中,叶子节点是指没有子节点的节点。...
- **答案解析**:深度为k的二叉树最多有\(2^k - 1\)个结点,最少有k个结点。这是因为最满的二叉树在每一层都有最多的结点数,而最少的情况则是在每一层只有一个结点。 ### 综合题解析 #### 1. 哈夫曼树的构建 - **...
本次实验是利用二叉排序树和平衡二叉树达到以下目的:(1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)计算二叉排序树T查找成功的平均查找长度,输出结果...
数据结构二叉树的遍历 二叉树的深度 二叉树的某结点层次 二叉树结点数
- 学会计算二叉树中的结点总数和叶子节点数量。 #### 实验内容 本次实验要求学生采用二叉树链表作为存储结构,具体包括以下内容: 1. **二叉树的建立**:根据给定的先序序列构建二叉树。这里采用了一种特殊的方法...
### 编写一个将二叉树中每个结点的左右孩子交换的算法 #### 背景介绍 在计算机科学中,二叉树是一种常用的数据结构,它在很多实际问题中有着广泛的应用,如文件系统、编译器设计、数据库索引等。二叉树中的每个...