56.【树型结构】(一)

简介: 56.【树型结构】

(一)、树型结构

1.树的定义:

树是一种数据结构,它是由n(n≥0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

每个结点有零个或多个子结点(n>=0)没有父结点的结点称为根节点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。(一对多的关系,。没有节点这一说)

2.树需要注意的地方

1.一个树只能有一个根结点,但可以有多个子结点。

2.子结点的个数没有限制,但是子结点一定不能相交互。

3.结点的分类:(树的度 节点的度)

树的结点包含一个数据元素若干个指向其子树的分支。结点拥有的子树数称为结点的度(Degree)。度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支支结点。除根结点之外,分支结点也称为内部结点树的度是树内各结点的度的最大值。

4.结点间的关系:

结点的子树的根称为该结点的孩子(Child),相应的,该结点称为孩子的双亲(Parent)(注意是双亲,不是单亲)。同一个双亲的孩子之间互称兄弟(Sibling)。结点的祖先是从根到该结点所经分支上的所有结点。以某结点为根的子树中的任一结点都称为该结点的子孙。

5.树的其他相关概念:

结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。双亲在同一层的结点互为堂兄弟。树中结点的最大层次称为树的深度(Depth)或高度。

如果将树中结点的各子树看成从左至右是有次序的,不能互换,则称该树为有序树,否则为无序树。

森林(Forest)是m(m>=0)棵互不相交的树的集合

根结点没有父结点,其他的结点都有一个父结点,
子结点 :父结点的下一层。
叶子结点:没有子结点的结点。
结点的度:结点的子结点数。
树的度:最多的叶结点的度。
结点的层:根结点为1,依次类推。
高度 :树的最大层。
森林:

(二)、二叉树

二叉树的定义:

二叉树的每个结点的子结点最多只有两个子树的树结构。也就是说树的度为2

满二叉树的定义:

每一层的结点树都达到最大值。

完全二叉树的定义:

设二叉树的深度为k,除第k层外,其他各层(1~(k-1))的结点数都达到最大值第k层所有的结点都连续集中在最左边,这就是完全二叉树。

1.二叉树的创建:

创建结点:

public class Node{
        //数值
        Object item;
        //左右子结点
        Node left;
        Node right;
        public Node(Object item){
            this.item=item;
        }
    }

创建树:

public void CreateTree() {
        //创建根节点
        root=new Node(1);
        //第二层
        //创建左子结点
        Node Left=new Node(2);
        //创建右子结点
        Node Right=new Node(3);
        //进行关联
        root.left=Left;
        root.right=Right;
        //第三层
        Node Left2=new Node(4);
        //创建右子结点
        Node Right2=new Node(5);
        //进行关联
        root.left.left=Left2;
        root.left.right=Right2;
        //第三层
        Node Left3=new Node(6);
        //创建右子结点
        Node Right3=new Node(7);
        //进行关联
        root.right.left=Left3;
        root.right.right=Right3;
    }

前序遍历:

public void ShowTree(Node node){
        if(node==null){
            return;
        }
        //遍历根节点
        System.out.println(node.item);
        //遍历左子树
        ShowTree(node.left);
        //遍历右子树
        ShowTree(node.right);
    }

中序遍历:

public void MidShowTree(Node node){
        if(node==null){
            return;
        }
        //遍历左子树
        MidShowTree(node.left);
        //遍历根节点
        System.out.println(node.item);
        //遍历右子树
        MidShowTree(node.right);
    }

后序遍历:

public void FinShowTree(Node node){
        if(node==null){
            return;
        }
        //遍历左子树
        FinShowTree(node.left);
        //遍历右子树
        FinShowTree(node.right);
        //遍历根节点
        System.out.println(node.item);
    }

层次:

public void LeveTree(Node node){
        //创建队列;
        ArrayDeque <Node> ad=new ArrayDeque<>(10);
        //加入根节点
        ad.add(node);
        while (!ad.isEmpty()) {
            Node n=ad.poll();
            System.out.println(n.item);
            //左子树放到队列
            if(n.left!=null){
                ad.add(n.left);
            }
            //将右子树放到队列中去
            if(n.right!=null){
                ad.add(n.right);
            }
        }
    }

全部代码:

1.1.全部代码:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String []avgs){
    Tree t=new Tree();
    t.CreateTree();
    t.ShowTree(t.root);
        System.out.println("==============");
    t.MidShowTree(t.root);
        System.out.println("==============");
        t.FinShowTree(t.root);
        System.out.println("==============");
        t.LeveTree(t.root);
        System.out.println("==============");
        Tree.Node result=t.Select(t.root,13);
        if(result==null){
            System.out.println("无相等的结果");
        }else{
            System.out.println("有相等的结果为:"+result.item);
        }
        System.out.println("===========");
        t.Delete(t.root,1);
        t.LeveTree(t.root);
    }
}



相关文章
|
3月前
|
存储 测试技术 C++
C++中的结构
C++中的结构
18 2
|
3月前
|
算法 C++
C++中的结构应用:Josephus问题
C++中的结构应用:Josephus问题
27 1
|
12月前
56.【树型结构】(三)
56.【树型结构】
52 0
|
11月前
树型结构(二叉树的基础)
树型结构(二叉树的基础)
34 0
|
12月前
56.【树型结构】(二)
56.【树型结构】
36 0
C#视频-三大结构
C#视频-三大结构
48 0
|
JavaScript 前端开发 搜索推荐
TypeScriopt之基本结构
TypeScriopt之基本结构
77 0
|
存储 索引
神奇的数据——树形结构
树 1. 树和二叉树 1.1 什么是树 树(tree)是n(n&gt;=0)个节点的有限集。当n=0时,称为空树。在任意一个非空树中存在以下特点: 有且仅有一个特定的点称为根节点。 当n&gt;1时其余的节点可分为m个互不相交的有限集,每一个集合本身又是一个树,并称为根的子树。 1.1.1 名词: 根节点(root):顶端没有“父亲”,称为根节点。 叶子节点(leaf):末端没有“孩子”,称为叶子节点。 父节点(parent):节点的上一级。 孩子节点(child) :节点的下一级。 兄弟节
232 2
神奇的数据——树形结构