树结构(二叉树)

本文介绍了树的基本定义、相关术语和分类,特别深入讲解了二叉树的概念,包括二叉树的遍历(前序、中序、后序及层次遍历)、查询与删除操作、高度计算以及线索化二叉树。通过数组实现二叉树,并讨论了遍历方法。
摘要由CSDN通过智能技术生成

前言:数组和链表在存储数据的时候各有优劣。

        数组查询快,但是在插入或者删除的时候需要移动数据,还会有扩容的问题。

        链表插入和删除快,但是在检索的时候效率低。

树这种存储结构可以有效的同时提高数据的存储和检索效率。

1.树的基本定义:

  • 树是由n(n>=0)个有限节点组成的一个具有层次关系的集合。
    • 树的特征:
      • 每个节点有0个或者多个子节点;
      • 没有父节点的节点为根节点;
      • 每个非根节点只有一个父节点;
      • 除了根节点外,每个子节点可以分为多个不想交的子树;

 树的相关术语

  • 节点:即树存储数据的对象。
  • 根节点:树中唯一没有父节点的节点。
  • 父节点:节点的上一层节点,每个节点最多只有一个父节点。
  • 子节点:节点的下一层节点,每个节点可以有多个子节点,也可以没有子节点。
  • 叶子节点:没有子节点的节点。
  • 节点的度:节点的子节点的数量。
  • 树的度:一棵树中,最大的节点的度称为树的度。
  • 路径:从根节点找到当前节点的路线。
  • 节点的层:从根节点开始,根节点的层次为1,根的直接下一层为2,以此类推。
  • 高度:树的最大层。
  • 森林:由m(m>=0)棵互不相交的树的集合称为森林;将一颗非空树的根节点删除,树就变成了一个森林,给森林增加一个统一的根节点,森林就变成了一颗树。

 树的分类:

  • 二叉树:只有两个子节点的树
    • 查询树
      • 平衡树
      • 红黑树
    • 带权的树
      • 霍夫曼树
      • 最优二叉树
    • 线索二叉树
  • 多叉树:超过两个子节点的树
    • B树
    • B+树

2.二叉树 

  • 二叉树是每个节点最多有两个子树的树结构,也就是说树的度是2。
  • 满二叉树:每一个层的节点树都达到了最大值。
  • 完全二叉树:若设二叉树的深度为k,除第k层外,其他各层(1~k-1)的节点树都达到了最大的树,第k层所在的节点都连续集中在最左边。

        

/**
 * 链表实现一颗简单的三层二叉树
 */
public class Binary_Tree1 {
    //定义节点类
    public class Node{
        //存储数据
        Object item;
        //左子节点
        Node left;
        //右子节点
        Node right;

        //判断当前左右指针是否线索化
        boolean isLeftThread=false;
        boolean isRightThread=false;

        public Node(Object obj){
            this.item=obj;
        }
    }

    //定义一个根节点
    Node root;

    //创建一颗树
    public void createTree(){
        //创建根节点
        root=new Node(1);
        //创建左子节点
        Node leftNode=new Node(2);
        //创建右子节点
        Node rightNode=new Node(3);
        //关联
        root.left=leftNode;
        root.right=rightNode;

        //创建左子节点的左子节点
        Node leftLeftNode=new Node(4);
        //创建左节点的右子节点
        Node leftRightNode=new Node(5);
        //关联
        leftNode.left=leftLeftNode;
        leftNod
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值