import java.util.*;
public class BinaryTree {
protected Node root;
public BinaryTree(Node root) {
this.root = root;
}
public Node getRoot() {
return root;
}
/** 构造树 */
public static Node init() {
Node a = new Node('A');
Node b = new Node('B', null, a);
Node c = new Node('C');
Node d = new Node('D', b, c);
Node e = new Node('E');
Node f = new Node('F', e, null);
Node g = new Node('G', null, f);
Node h = new Node('H', d, g);
return h;// root
}
/**
* 返回树的层数
*
* @param p
* @return
*/
public static int h(Node p) {
if (p == null)
return -1;
return 1 + Math.max(h(p.getLeft()), h(p.getRight()));// 返回较大的
}
/**
* 检查是否是平衡树
*
* @param p
* @return
*/
public static boolean checkAVL(Node p) {
if (p == null)
return true;
// 左子树与右子树绝对值不能超过 1,并且左右子树也是平衡二叉树
return (Math.abs(h(p.getLeft()) - h(p.getRight())) <= 1 && checkAVL(p.getLeft()) && checkAVL(p.getRight()));
}
/**
* @param args
*/
public static void main(String[] args) {
BinaryTree tree = new BinaryTree(init());
System.out.println("是否是平衡树");
System.out.println(checkAVL(tree.getRoot()));
}
}
class Node {
private char key;
private Node left, right;
public Node(char key) {
this(key, null, null);
}
public Node(char key, Node left, Node right) {
this.key = key;
this.left = left;
this.right = right;
}
public char getKey() {
return key;
}
public void setKey(char key) {
this.key = key;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}
C:\ex>java BinaryTree
是否是平衡树
false
分享到:
相关推荐
根据给定的文件信息,我们将深入探讨如何通过不同的方法来判断一棵二叉树是否为二叉排序树(Binary Search Tree, BST)。二叉排序树是一种特殊的二叉树,它满足以下条件: 1. 若左子树不为空,则左子树上所有节点的...
在实际应用中,为了避免二叉排序树退化,可以采用平衡二叉树,如AVL树或红黑树。这些平衡二叉树在每次插入或删除后都会自动调整,以确保树的高度保持在一个较小的范围内,从而保证操作效率。 总之,二叉排序树是...
二叉平衡树是一种特殊类型的二叉树,它在保持二叉搜索树特性的同时,通过特定的结构调整策略确保了树的高度平衡。这样的平衡状态使得在树中进行查找、插入和删除等操作的时间复杂度都能保持在对数级别,极大地提高了...
在这个课程设计报告中,我们将聚焦于一种特殊类型的二叉树——二叉平衡排序树,它在实际应用中展现出优秀的性能特点。 二叉平衡排序树,顾名思义,是一种保持平衡的二叉搜索树。传统的二叉搜索树在插入和删除操作后...
我们需要相应的旋转算法(如左旋、右旋、左右旋或右左旋)来重新平衡树。 7. **TestBSTWindow.java**:可能是一个测试窗口,用于可视化展示二叉排序树或平衡二叉树的结构,帮助用户直观地理解树的操作。 8. **...
本项目涵盖了三种重要的树形数据结构的Java实现:红黑树(RBTree)、二叉平衡树(AVLTree)以及二叉排序树(BSTree)。这些数据结构在处理大量数据时,能够提供高效的插入、删除和查找操作,广泛应用于数据库索引、...
本压缩包文件“DataStructTest”包含了对二叉排序树和平衡二叉树的实现,旨在帮助学习者深入理解这些概念。 首先,让我们了解一下二叉树的基本概念。二叉树是由节点构成的树形结构,每个节点最多有两个子节点,分别...
二叉排序树,又称二叉查找树或二叉搜索树,是一种特殊的数据结构,它具有以下特性:对于树中的任意节点,其左子树中的所有节点的值都小于该节点的值,而右子树中所有节点的值都大于该节点的值。这种特性使得在二叉...
为了完整实现删除功能,你需要考虑如何重新平衡树以保持排序性质,并处理各种边界条件。 二叉排序树的优点包括快速查找、插入和删除操作,尤其是当树保持平衡时。然而,如果插入的数据已经排序,最坏的情况是树退化...
平衡二叉树(Balanced Binary Tree)是二叉搜索树的一种优化,它的左右两个子树的高度差不超过1,并且左右两个子树都是一棵平衡二叉树。常见的平衡二叉树类型有AVL树和红黑树。平衡二叉树的主要目的是保持树的平衡,...
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。在Java中,我们可以利用面向对象编程的概念来实现二叉排序树...
- 判断是否为平衡二叉树 - 遍历二叉排序树 2. 确保算法对多种测试数据有正确响应,包括正常情况和极端情况。 3. 提供异常处理,确保输入错误或异常情况时能给出有效信息。 4. 数据元素为整数,输入以回车结束。 5....
二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种特殊类型的二叉树,其每个节点的左子树只包含比其小的元素,右子树包含比其大的元素,且整个树保持自平衡。在本实验报告中,我们将深入...
例如,可能讲解了如何判断一棵二叉树是否平衡,或者如何将非递归的遍历算法转化为递归形式。 总的来说,学习这一章节的内容对于理解和实现二叉树的算法至关重要,这对于成为一名合格的程序员或数据结构专家是必不可...
平衡二叉排序树(Balanced Binary Search Tree,简称BBST)是一种特殊的二叉树数据结构,它具有以下特性:每个节点包含一个键、一个关联的值、指向左子树的引用以及指向右子树的引用;键在左子树的所有节点都小于它...
二叉排序树(Binary Search Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构。在二叉排序树中,每个节点都包含一个键值,对于任意节点,其左子树中的所有节点的键值小于该节点的键值,而...
二叉平衡树是一种特殊的二叉树结构,它的左右子树高度差不超过1,这使得在树中的任何位置插入、删除和查找操作的时间复杂度都保持为O(log n)。在这个Java实现中,我们主要关注AVL树,它是最常见的平衡二叉搜索树之一...
二叉排序树(Binary Search Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。二叉排序树的主要特点是:对于任意节点,其左子树中的所有...
3. **删除操作 (delete)**: 删除节点比较复杂,因为可能涉及重新平衡树。基本策略包括替换、删除单节点和删除双节点。 - **替换**: 如果要删除的节点没有子节点,直接删除即可。 - **删除单节点**: 如果只有一个...