当前位置:编程学习 > JAVA >>

java实现二叉树的常见操作

树型结构是最常见的非线性结构,其中二叉树最为常见。今天我主要就是用java来实现一下树的一些常见操作。

       首先需要一个用来存储树节点值的javabean:

view plain
public class TreeBean { 
     
    private int nodeValue; 
     
    public int getNodeValue() { 
        return nodeValue; 
    } 
 
    public void setNodeValue(int nodeValue) { 
        this.nodeValue = nodeValue; 
    } 

       然后是树的节点bean:

view plain
public class TreeNode{ 
 
    private TreeBean data; 
    private TreeNode leftNode; 
    private TreeNode rightNode; 
     
    //构造函数   
    public TreeNode(){   
        data = new TreeBean();   
    } 
     
    public TreeBean getData() { 
        return data; 
    } 
 
    public void setData(TreeBean data) { 
        this.data = data; 
    } 
 
    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; 
    } 
 

       最后是Tree的主体:

view plain
public class Tree { 
    //树的根节点 
    private TreeNode root; 
    public TreeNode getRoot() { 
        return root; 
    } 
    public void setRoot(TreeNode root) { 
        this.root = root; 
    } 
     
    //无参构造函数 
    Tree(){} 
     
    Tree(int nodeValue){ 
        root = new TreeNode(); 
        TreeBean nodeBean = new TreeBean();   
        nodeBean.setNodeValue(nodeValue); 
        root.setData(nodeBean); 
    } 
    /**
     * 销毁树,将树置空。
     * @author letthinking
     * @param tree
     * @return
     */ 
    public static Tree destroy(Tree tree){ 
        return null; 
    } 
    /**
     * 给树插入数据
     * @author letthinking
     * @param root
     * @param node
     */ 
    public void insert(TreeNode root,TreeNode node){ 
        //如果根节点为空,则赋值给根节点 
        if(root == null){ 
            root = node; 
        }else{ 
            //该节点与它的双亲节点比较,如果小于双亲节点,就将它作为左孩子,否则为右孩子。 
            if(node.getData().getNodeValue() < root.getData().getNodeValue()){ 
                //判断该节点是否为空,如果不为空就继续递归。 
                if(root.getLeftNode() == null){ 
                    root.setLeftNode(node); 
                }else{ 
                    insert(root.getLeftNode(),node); 
                } 
            }else{ 
                if(root.getRightNode() == null){ 
                    root.setRightNode(node); 
                }else{ 
                    insert(root.getRightNode(),node); 
                } 
            } 
        } 
    } 
     
    /**
     * 将树的所有节点清空
     * @author letthinking
     * @param root 树的根节点
     */ 
    public void clearTree(TreeNode root){ 
         
        if(root.getData() == null){ 
            if(root.getLeftNode() != null){ 
                clearTree(root.getLeftNode()); 
            } 
            if(root.getRightNode() != null){ 
                clearTree(root.getRightNode()); 
            } &nbs

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,