Java复习之二叉树

这篇博客主要是总结一下Java中二叉树这种数据结构。

1.二叉树的原理分析

数是一种重要的非线性数据结构,直观的看,它是数据元素(在树中称为节点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序数。通常子数被称作左子树和右子树

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

2.二叉树的算法实现

public class BinaryTree {
    private Node root;//声明一个对象,则创建了对象中的属性和方法
    //添加节点,提供给外部调用
    public void add(int data)
    {
        if(root==null)
        {
            root = new Node(data);
        }else
        {
            //内部类的方法
            root.addNode(data);
        }
    }
    //输出节点,提供给外部调用
    public void print()
    {
        if(root!=null)
        {
            root.printNode();
        }
    }
    //节点类
    class Node{
        private int data;//当前节点数据
        private Node left;//左子树
        private Node right;//右子树
        public Node(int data)
        {
            this.data=data;
        }
        //添加节点
        public void addNode(int data)
        {
            if(this.data>data)
            {
                if(this.left==null)
                {
                    this.left=new Node(data);
                }else
                {
                    this.left.addNode(data);
                }
            }
            else if(this.data<=data)
            {
                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.println(this.data);

            if(this.right!=null)
            {
                this.right.printNode();
            }
        }
    }
}
public class BinaryTreeDemo {
    public static void main(String args[])
    {
        //只使用外部类,在外部类的方法中调用内部的方法
        //外部类的方法只是针对于根节点而言的
        BinaryTree bt = new BinaryTree();
        bt.add(8);
        bt.add(3);
        bt.add(10);
        bt.add(1);
        bt.add(6);
        bt.add(14);
        bt.add(4);
        bt.add(7);
        bt.add(13);
        bt.print();
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值