数据结构------树(Java语言描述)

一、树的基本概念

树是一种非线性的数据结构,它由节点组成,有一个特定的节点称为根节点,其余节点可以分为多个互不相交的子树。

树中的节点具有以下特点:

1.每个节点有零个或多个子节点。

2.除了根节点外,每个节点有且仅有一个父节点。

3.没有父节点的节点就是根节点,没有子节点的节点称为叶子节点。

二、代码示例

下面是二叉树的代码示例(Java语言)

package dataStructure.tree;

//二叉树的节点类
public class TreeNode {
    //用来保存节点的数据
    int data;

    //用来保存该节点的左右子节点
    TreeNode left;
    TreeNode right;

    //使用构造方法来限制节点对象必须有值
    public TreeNode(int data){
        this.data = data;
    }
}
package dataStructure.tree;

//二叉树类
public class BinaryTree {
    //二叉树的根节点
    private TreeNode root;


    //往二叉树中添加数据
    public void add(int e) {
        //先创建节点对象,然后再判断他要放到什么位置
        TreeNode node = new TreeNode(e);
        if (root == null) {
            //如果当前树是空的,则把该节点作为根节点
            root = node;
        } else {
            add(root, node);
        }
    }

    private void add(TreeNode t, TreeNode n) {
        if (n.data < t.data) {
            if (t.left == null) {
                t.left = n;
                return;
            }
            add(t.left, n);
        } else {
            if (t.right == null) {
                t.right = n;
                return;
            }
            add(t.right, n);
        }
    }

    //前序遍历
    public void preOrder() {
        preOrder(root);
    }

    private void preOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        System.out.println(node.data);
        preOrder(node.left);
        preOrder(node.right);
    }

    //中序遍历
    public void middleOrder() {
        middleOrder(root);
    }

    private void middleOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        middleOrder(node.left);
        System.out.println(node.data);
        middleOrder(node.right);
    }

    //后序遍历
    public void rearOrder() {
        rearOrder(root);
    }

    private void rearOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        rearOrder(node.left);
        rearOrder(node.right);
        System.out.println(node.data);
    }

    public static void main(String[] args) {
        BinaryTree bt = new BinaryTree();
        bt.add(10);
        bt.add(5);
        bt.add(15);
        bt.add(3);
        bt.add(8);
        bt.add(2);
        bt.add(4);
        bt.add(7);
        bt.add(9);
        bt.add(12);
        bt.add(18);
        bt.add(11);
        bt.add(13);
        bt.add(16);
        bt.add(20);

        bt.preOrder();
        System.out.println("-----------------------------------------------");
        bt.middleOrder();
        System.out.println("-----------------------------------------------");
        bt.rearOrder();

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值