码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA实现二叉树(简易版)

时间:2015-04-28 20:58:00      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

个人感觉二叉树的实现主要还是如何构造一颗二叉树。构造二叉树函数的设计方法多种多样。以下程序通过定义内部类来表示二叉树的结点,然后再实现了二叉树这种数据结构的一些基本操作。

 

package tree;

public class BinaryTree<E> {
    //为什么要用静态内部类?静态内部类中不能访问外部类的非静态成员
    public static class TreeNode{
//        E data;
        Object data;
        TreeNode left;
        TreeNode right;
        public TreeNode(){
            
        }
        public TreeNode(Object data){
            this.data = data;
        }
        //构造一个新节点,该节点以left节点为其左孩子,right节点为其右孩子
        public TreeNode(Object data, TreeNode left, TreeNode right){
            this.data = data;
            this.left = left;
            this.right = right;
        }
    }
    
    private TreeNode root;//实现二叉树的类的数据域,即根结点来表示二叉树
    
    public BinaryTree(){
        this.root = new TreeNode();
    }
    //以指定的根元素创建一颗二叉树
    public BinaryTree(E data){
        this.root = new TreeNode(data);
    }
    
    //为指定的结点添加子结点
    public TreeNode addNode(TreeNode parent, E data, boolean isLeft){
        if(parent == null)
            throw new RuntimeException("父节点为空,无法添加子结点");
        if(isLeft && parent.left != null)
            throw new RuntimeException("节点已经左子节点,添加失败");
        if(!isLeft && parent.right != null)
            throw new RuntimeException("节点已经有右子节点,添加失败");
        TreeNode newNode = new TreeNode(data);
        if(isLeft)
            parent.left = newNode;
        else
            parent.right = newNode;
        return newNode;
    }
    
    public boolean empty(){
        return root.data == null;//根据根元素判断二叉树是否为空
    }
    
    public TreeNode root(){
        if(empty())
            throw new RuntimeException("树空,无法访问根结点");
        return root;
    }
    
    public E parent(TreeNode node){
        return null;//采用二叉树链表存储时,访问父结点需要遍历整棵二叉树,因为这里不实现
    }
    
    //访问指定节点的左结点,返回的是其左孩子的数据域
    public E leftChild(TreeNode parent){
        if(parent == null)
            throw new RuntimeException("空结点不能访问其左孩子");
        return parent.left == null ? null : (E)parent.left.data;
    }
    public E rightChild(TreeNode parent){
        if(parent == null)
            throw new RuntimeException("空结点不能访问其右孩子");
        return parent.right == null ? null : (E)parent.right.data;
    }
    
    public int deep(){
        return deep(root);
    }
    private int deep(TreeNode node){
        if(node == null)
            return 0;
        else{
            int leftDeep = deep(node.left);
            int rightDeep = deep(node.right);
            int max = leftDeep > rightDeep ? leftDeep : rightDeep;
            return max + 1;
        }
    }
}

 

JAVA实现二叉树(简易版)

标签:

原文地址:http://www.cnblogs.com/hapjin/p/4463868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!