Java数据结构与算法---二叉树

来源:互联网 发布:复合vb 编辑:程序博客网 时间:2024/05/29 19:45

Java数据结构与算法—二叉树

二叉树也是一直简单的数据结构,主要难点是在插入时要判断一下要插入在二叉树的左子树还是右子树上!三种遍历方法也是十分简单,在代码中也有实现:

首先是节点的数据结构:

package cn.n_tree;public class Node {    private int key;    private int data;    private Node left;    private Node right;    public int getKey() {        return key;    }    public void setKey(int key) {        this.key = key;    }    public int getData() {        return data;    }    public void setData(int data) {        this.data = data;    }    public Node getLeft() {        return left;    }    public void setLeft(Node left) {        this.left = left;    }    public Node getRight() {        return right;    }    public void setRight(Node right) {        this.right = right;    }    public Node(int key, int data) {        super();        this.key = key;        this.data = data;    }    //打印    public void disPlay(){         System.out.println(this.key+","+this.data);     }}

然后就是各种方法,如插入,遍历:

package cn.n_tree;public class BinaryTree {    private Node root;    public Node getRoot() {        return root;    }    //插入方法    public void insert(int key,int data){        Node newNode = new Node(key,data);        if(root==null){            root=newNode;        }else{            Node current=root;            while(true){                if(key<current.getKey()){//应该放在左边                    if(current.getLeft()==null){//已经到页子节点了                        current.setLeft(newNode);                        //break;                        return;                    }                    current=current.getLeft();                }else{//在右子树                    if(current.getRight()==null){//已经是页子节点了                        current.setRight(newNode);                        //break;                        return;                    }                    current=current.getRight();                }            }        }    }    //查找方法    public Node find(int key){        Node current = root;        if(root==null){            System.out.println("空二叉树!");        }else{            while(current.getKey()!=key){                if(key<current.getKey()){//在左子树                    current=current.getLeft();                }else{//在右子树                    current = current.getRight();                }                if(current==null){                    System.out.println("二叉树到底了,没找到");                    break;                }            }        }        return current;    }    //删除方法    public void delete(int key){    }    //修改方法    public void change(int key,int newData){        Node find = find(key);        find.setData(newData);    }    //先序遍历    public void preOrder(Node node){        if(node!=null){            node.disPlay();            preOrder(node.getLeft());            preOrder(node.getRight());        }    }    //中序遍历    public void inOrder(Node node){        if(node!=null){            inOrder(node.getLeft());            node.disPlay();            inOrder(node.getRight());        }    }    //后序遍历    public void endOrder(Node node){        if(node!=null){            endOrder(node.getLeft());            endOrder(node.getRight());            node.disPlay();        }    }    public static void main(String[] args) {        //插入        BinaryTree tree = new BinaryTree();    /*  tree.insert(1, 111);        ////////////////        Node res = tree.find(1);        System.out.println("查找res结果:");        res.disPlay();        //////////////        System.out.println("修改节点的值!");        tree.change(1, 1112);        System.out.println("修改后的值:");        res = tree.find(1);        System.out.println("查找res结果:");        res.disPlay();*/        //////////////先序遍历        System.out.println("/////////////////先序遍历");        tree.insert(80, 80);        tree.insert(49, 49);        tree.insert(42, 42);        tree.insert(30, 30);        tree.insert(45, 45);        tree.insert(90, 90);        tree.insert(150, 150);        tree.insert(130, 130);        tree.insert(82, 82);        tree.preOrder(tree.getRoot());        //////////////中序遍历        System.out.println("/////////////////中序遍历");        tree.inOrder(tree.getRoot());        //////////////后序遍历        System.out.println("/////////////////后序遍历");        tree.endOrder(tree.getRoot());    }}