简单树及其遍历的java实现

一.什么是树?

树是一种类似于链表的数据结构,只不过链表中节点的关系是1对1,而在树中就变成了多对多的关系。

二.树的学习相关术语:

1.根节点:就是唯一一个没有父母节点的那个。
2.:它表示父母节点到孩子节点的连接线。
3.叶子节点:没有孩子的节点交叶子节点。
4兄弟节点:拥有相同的父母节点的节点。
5.祖先节点: 隔了1辈及以上的节点叫祖先节点。
6.节点的大小:指的是其子孙加上自己的个数。
7.树的层:位于相同深度的节点的集合。
8.节点的深度:从根节点到目标节点的路径长度。
9.节点的高度:从目标节点到最深节点的路径长度。
10.树的高度:树中所有节点高度的最大值。
11斜树:除了叶子节点外,其余每个节点只有一个孩子节点。

三.二叉树

一颗树中的节点的孩子节点最多两个。

二叉树有几个类型:

1.严格二叉树:要么每个节点有两个孩子,要么没有。
2.满二叉树:每个节点刚好有两个孩子节点且所有叶子节点都在同一层。(左右对称)
3.完全二叉树:每个节点都有两个孩子。

四.用java实现简单二叉树:

二叉树节点的定义

class BinaryTreeNode{
    private int data;//节点数据
    private BinaryTreeNode left;//左孩子
    private BinaryTreeNode right;//右孩子
    public int getData()
    {
        return data;
    }
    public void setData(int data)
    {
        this.data=data;
    }
    public void setLeft(BinaryTreeNode left)
    {
        this.left=left;
    }
    public BinaryTreeNode getLeft()
    {
        return left;
    }
    public void setRight(BinaryTreeNode right)
    {
        this.right=right;
    }
    public BinaryTreeNode getRight()
    {
        return right;
    }
}

遍历方法定义:
有三种:
1.前序遍历:根左右
2.中序遍历:左根右
3.后序遍历:左右根
且三种遍历的时间复杂度一样都为:O(n)
空间复杂度也是:O(n)

class CaoZuo{
    void Check1(BinaryTreeNode first)//前序遍历
    {
        if(first!=null)
        {
            System.out.print(first.getData());
            Check1(first.getLeft());
            Check1((first.getRight()));
        }
    }

    void Check2(BinaryTreeNode first)//中序遍历
    {
        if(first!=null)
        {
            Check1(first.getLeft());
            System.out.print(first.getData());
            Check1((first.getRight()));
        }
    }

    void Check3(BinaryTreeNode first)//后序遍历
    {
        if(first!=null)
        {
            Check1(first.getLeft());
            Check1((first.getRight()));
            System.out.print(first.getData());
        }
    }

}

测试:

public class EasyTree {
    public static void main(String[] args) {
        int []roots=new int[10];

        BinaryTreeNode one = new BinaryTreeNode(1);
        BinaryTreeNode two = new BinaryTreeNode(2);
        BinaryTreeNode three = new BinaryTreeNode(3);
        BinaryTreeNode four = new BinaryTreeNode(4);
        BinaryTreeNode five = new BinaryTreeNode(5);
        one.setLeft(two);
        one.setRight(three);
        two.setLeft(four);
        two.setRight(five);
        CaoZuo check = new CaoZuo();
        System.out.println("前序遍历:");
        check.Check1(one);
        System.out.println("\n中序遍历:");
        check.Check2(one);
        System.out.println("\n后序遍历:");
        check.Check3(one);

    }
}

结果:
在这里插入图片描述

发布了73 篇原创文章 · 获赞 1 · 访问量 2451

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/105046675