二叉树(BinaryTree)的Java详细实现

关于二叉树的基本概念:二叉树基本概念

二叉树实现的方法:

 * isEmpty():判断树是否为空。
 * clear():清空二叉树。
 * add(BTNode, Type):向指定节点添加指定的孩子。
 * height():计算二叉树的高度。
 * size():计算二叉树的大小。
 * findNode():查找包含指定数据的节点是否存在。
 * findParent():查找包含指定数据的节点的父节点。
 * recursePreIterate():递归先序遍历二叉树。
 * recurseInIterate():递归中序遍历二叉树。
 * recursePostIterate():递归后序遍历二叉树。
 * circlePreIterate():循环先序遍历二叉树。
 * circleInIterate():循环中序遍历二叉树。
 * circlePostIterate():循环后序遍历二叉树。
 * layerIterate():层次遍历二叉树

首先是二叉树的节点的代码(BTNode):

/**
 * 二叉树的二叉链式存储实现的节点
 */
public class BTNode<Type>{
    /**
     * 每一个节点需要保存的内容:本身数据、左孩子、右孩子
     * data:自身数据
     * left:左孩子
     * right:右孩子
     */
    private Type data;
    private BTNode left;
    private BTNode right;

    /**
     * 三种构造方法
     */
    public BTNode(){//空构造方法
        data = null;
        left = null;
        right = null;
    }

    public BTNode(Type data){//只有数据的构造方法
        this.data = data;
        this.left = null;
        this.right = null;
    }

    //四个内容都有的构造方法
    public BTNode(Type data, BTNode left, BTNode right, BTNode parent){
        this.data = data;
        this.left = left;
        this.right = right;
    }

    /**
     * 三个属性的 get() 方法
     */
    public BTNode getLeft() {
        return left;
    }

    public BTNode getRight() {
        return right;
    }

    public Type getData() {
        return data;
    }

    /**
     * 三个属性的 set()方法
     */
    public void setData(Type data) {
        this.data = data;
    }

    public void setLeft(BTNode left) {
        this.left = left;
    }

    public void setRight(BTNode right) {
        this.right = right;
    }
}

(复制即可用)

下面是二叉树实现的代码(BinaryTree):

import stackImp.Stack;//自己实现的栈

/**
 * 二叉树的二叉链式实现
 * 三叉链式实现比二叉链式实现少一个查找父节点的方法
 * 实现过程中,需要使用的栈是我自己编写的栈,代码见我的blog文章:栈(Stack)的Java实现
 *
 * 二叉树需要实现的方法:
 *   isEmpty():判断树是否为空。
 *   clear():清空二叉树。
 *   add(BTNode, Type):向指定节点添加指定的孩子。
 *   height():计算二叉树的高度。
 *   size():计算二叉树的大小。
 *   findNode():查找包含指定数据的节点是否存在。
 *   findParent():查找包含指定数据的节点的父节点。
 *   recursePreIterate():递归先序遍历二叉树。
 *   recurseInIterate():递归中序遍历二叉树。
 *   recursePostIterate():递归后序遍历二叉树。
 *   circlePreIterate():循环先序遍历二叉树。
 *   circleInIterate():循环中序遍历二叉树。
 *   circlePostIterate():循环后序遍历二叉树。
 *   layerIterate():层次遍历二叉树。
 */
public class BinaryTree<Type> {
    /**
     * root:二叉树的根节点
     */
    private BTNode root;//根节点

    /**
     * 两种构造方法
     */
    public BinaryTree(){//空构造方法
        root = null;
    }

    public BinaryTree(Type data){//使用一个数据的构造方法
        root = new BTNode(data);
    }

    /**
     * root 的 get() 方法和 set() 方法
     */
    public BTNode getRoot() {
        return root;
    }

    public void setRoot(BTNode root) {
        this.root = root;
    }

    /**
     * 判断树是否为空
     * @return 树是否为空
     */
    public boolean isEmpty(){
        if ((root == null))//根节点为空
            return true;
        return false;
        //简单的实现: return (root == null);
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值