Java二叉树数据结构原理

本文介绍了二叉树的基本概念、分类及特点,包括完全二叉树、满二叉树、二叉搜索树和均衡二叉树。还讨论了二叉树在Java中的搜索数据存储实现,并列举了其在数据库索引、文件系统等应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、二叉树的基本概率

什么是二叉树?
二叉树(Binary Tree)是树类应用最广泛的一种数据结构,也是非线性数据结构,顾名思义,二叉树的每个节点
最多只能包含两个孩子节点,一个节点可以包含0个,1个,2个孩子,如果是两个孩子,也就是通常我们说的左
孩子和右孩子,通常子树被称作“左子树”和“右子树”。
我想说的:
树结构对于初学者来说很容易绕晕,正因为如此,二叉树的原理也被很多企业在招聘Java工程师时,用于检验
应聘者的基础是否扎实的面试题。通常我们需要理解到位的是,二叉树的基本原理,和不同树之间的特点,常
用二叉树的应用场景就可以了,如果更进一步,可以写出实现代码,那就相当牛X了。
(图解)

PS:二叉树也是面试经常提起的,一定要掌握其原理和特点。

二、二叉树的分类及特点

比较常见的--些树名称的种类如下:


(1)完全二叉树(Complete Binary Tree)

  • 完全二叉树是二叉树的一个分类,它的特点是每个节点的孩子节点的数量可以是0,1, 2个,除此之外它要求每

层节点添加,必须是从左到右,不允许跳着添加。

完全二叉树

 

非完全二叉树

PS: JVM 堆内存中的逻辑结构就是使用完全二叉树实现


(2)满二叉树( Full Binary tree)

  • 满二叉树它的特点是每个节点的孩子节点要么没有,要么就是两个,不允许出现单个孩子的情况。

 


(3)二叉搜索树 (Ordered BinaryTree )【用的最多的一种】

  • 也称二叉排序树,这个是我们接触的最多的一种结构,它要求节点的左子树小于该节点本身,右子树大于该节点,

每个节点都符合这样的规则,对二叉搜索树进行中序遍历就得得到一个有序的序列

 PS:中序遍历,特点左中右打印数据【 中序(左中右),先序(中左右),后序(左右中)
(4)均衡二叉树(Balanced Binary Tree)

  • 均衡二叉树指的是一个节点的左右子树的高度差值不能大于1,均衡二叉树一般都是在二叉搜索树的基础之上添加

自动维持平衡的性质,这种树的插入,搜索,删除的综合效率比较高。


(5)完美二叉树(Perfect binary Tree)
完美二叉树是理想中的一种二叉树,这种树的特点就是非常完美,每个节点都有两个孩子节点,并且每层都被完
全填充,完美二叉树的叶子节点的高度都是一样。

 

三、二叉树搜索数据存储实现

二叉搜索树算法的排序规则:
1、选择第-一个元素作为根节点
2、之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树
3、最后按照中序遍历的方式进行输出,则可以得到排序的结果(左>根>右)
示例数据:8、3、10、1、6、14、4、7、13

Demo:

/**
 * 
 * @author 破茧化蝶YL
 *	2019年	8月	21日
 *	下午9:32:56
 *
 */
public class BinarySearchTreeDemo {

	public static void main(String[] args) {
		BinarySearchTree bst=new BinarySearchTree();
		//添加数据
        bst.add(8);
        bst.add(3);
        bst.add(10);
        bst.add(1);
        bst.add(6);
        bst.add(14);
        bst.add(4);
        bst.add(7);
        bst.add(13);

        bst.print();
	}

}


class BinarySearchTree {
    private Node root;
    public void add(int data){
        if(root==null){
            root=new Node(data);
        }else{
            root.addNode(data);
        }
    }

    public void print(){
        root.printNode();
    }
    //节点类
    private class Node{
        private int data;//数据
        private Node left;//左节点
        private Node right;//右节点

        public Node(int data){
            this.data=data;
        }
        //添加节点
        public void addNode(int data){
            if(data<this.data){
                if(this.left==null){
                    this.left=new Node(data);
                }else{
                    this.left.addNode(data);
                }
            }else {
                if (this.right == null){
                    this.right = new Node(data);
                }else{
                    this.right.addNode(data);
                }
            }
        }
        //打印节点(中序遍历)
        public void printNode(){
            //打印左边
            if(this.left!=null){
                this.left.printNode();
            }
            //打印中间
            System.out.print(this.data+">>");
            //打印右边
            if(this.right!=null){
                this.right.printNode();
            }
        }
    }
}

四、二叉树的应用场景

1、除了二叉树,也有多叉树等,当然子节点越多,复杂度越高,但是其树的高度比较
低,所以拥有较高的查找性能,常用在数据库索引和文件系统。
2、二叉搜索树是最常用的一种方法,通过中序遍历出来的结果是排序的。
3、二叉树的应用很多,也是项目中应用最多的数据结构:例如Map、Set、逻辑存储结
构是完全二叉树等。
4、注意,面试题中二叉树一定是加分项。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值