java实现二叉树

来源:互联网 发布:ubuntu启动网络服务 编辑:程序博客网 时间:2024/06/08 11:51

学了一下使用java实现二叉树,以下是实现的代码,仅供参考。

先创建一个节点类:

package tree;public class TreeNode {    private Object value;    private TreeNode leftNode;    private TreeNode rightNode;    public Object getValue() {        return value;    }    public void setValue(Object value) {        this.value = value;    }    public TreeNode getLeftNode() {        return leftNode;    }    public void setLeftNode(TreeNode leftNode) {        this.leftNode = leftNode;    }    public TreeNode getRightNode() {        return rightNode;    }    public void setRightNode(TreeNode rightNode) {        this.rightNode = rightNode;    }}

创建一个树类:

package tree;public class Tree {    private TreeNode node;    public TreeNode getNode() {        return node;    }    public void setNode(TreeNode node) {        this.node = node;    }}

创建一个队列,用来存放节点(用来实现递归)

package tree;import java.util.LinkedList;//定义一个队列public class Queue {    //用list来实现队列    private LinkedList<TreeNode> list;    //初始化的时候就new一个队列    public Queue(){        list=new LinkedList<TreeNode>();    }    //节点入队列    public void enQueue(TreeNode node){        this.list.add(node);        }    //节点出队列,并返回这个节点    public TreeNode outQueue(){        return list.removeFirst();    }    //判断队列是否为空    public boolean isEmpty(){        return this.list.isEmpty();     }    public LinkedList<TreeNode> getList() {        return list;    }    public void setList(LinkedList<TreeNode> list) {        this.list = list;    }}

创建一个二叉树类(其中包含插入节点和三种遍历方法,都用到了递归的思想):

package tree;public class BinaryTree {    private Tree tree;    private Queue queue;    public BinaryTree(){        tree=new Tree();    }    public void insertNode(TreeNode node){        //如果树为空则设这个设这个节点        if(tree.getNode()==null){            tree.setNode(node);            return;        //如果不为空,这个树的节点进队        }else{            queue=new Queue();            queue.enQueue(tree.getNode());            while(!queue.isEmpty()){                TreeNode temp=queue.outQueue();                if(temp.getLeftNode()==null){                    temp.setLeftNode(node);                    return;                }else if(temp.getRightNode()==null){                    temp.setRightNode(node);                    return;                }else{                    queue.enQueue(temp.getLeftNode());                    queue.enQueue(temp.getRightNode());                }            }        }    }    public Tree getTree() {        return tree;    }    //三种遍历方法    //先序遍历    public void frontOrder(TreeNode node){        if(node!=null){            System.out.println(node.getValue());            this.frontOrder(node.getLeftNode());            this.frontOrder(node.getRightNode());        }    }    //中序遍历    public void midOrder(TreeNode node){        if(node!=null){            this.midOrder(node.getLeftNode());            System.out.println(node.getValue());            this.midOrder(node.getRightNode());        }    }    //后序遍历    public void lastOrder(TreeNode node){        if(node!=null){            this.lastOrder(node.getLeftNode());            this.lastOrder(node.getRightNode());            System.out.println(node.getValue());        }    }}

最后写一个测试代码:

package tree;public class TestBinaryTree {    public static void main(String[] args) {        BinaryTree binaryTree=new BinaryTree();        TreeNode[]nodes= new TreeNode[10];        for(int i=0;i<nodes.length;i++){            nodes[i]=new TreeNode();            nodes[i].setValue(i);            binaryTree.insertNode(nodes[i]);        }        System.out.println("先序遍历");        binaryTree.frontOrder(binaryTree.getTree().getNode());        System.out.println("中序遍历");        binaryTree.midOrder(binaryTree.getTree().getNode());        System.out.println("后序遍历");        binaryTree.lastOrder(binaryTree.getTree().getNode());    }}

控制台输出:

先序遍历0137849256中序遍历7381940526后序遍历7839415620
原创粉丝点击