创建二叉树 Java

网上的算法大多数是c语言的,Java对与树的操作比较少,都是指针操作,所以Java也可以实现。

网上的要么是一边输入一边构建,要么是手动insert,个人感觉不是一种特别好的写法。我这里用的是字符串构建,以‘#’分割。

本文主要是二叉树的构建,没有太多关于二叉树的操作,思路比较简单,故不做算法逻辑介绍。

二叉树结构类
public class BinaryTreeNode {
    char value;
    BinaryTreeNode left;
    BinaryTreeNode right;

    BinaryTreeNode() {}

    BinaryTreeNode(BinaryTreeNode left, BinaryTreeNode right){
        this.left = left;
        this.right = right;
    }
}

二叉树操作接口类

/**
 * @author: wbb
 * @date 2022/2/23 3:02 下午
 */
public interface BinaryTreeOperate {

    public BinaryTreeNode createTree(BinaryTreeNode node, char[] chars);

    public void preOrderTraverse(BinaryTreeNode node);

    public void inOrderTraverse(BinaryTreeNode node);

    public void postOrderTraverse(BinaryTreeNode node);
}

二叉树操作实现类


/**
 * @author: wbb
 * @date 2022/2/23 3:04 下午
 */
public class BinaryTreeOperateImpl implements BinaryTreeOperate{

    int i = 0;

    @Override
    public BinaryTreeNode createTree(BinaryTreeNode node, char[] chars) {

        if(chars[i] == '#'){
            node = null;
            i ++;
        } else{
            if(i != 0){
                node = new BinaryTreeNode();
            }
            node.value = chars[i];
            i ++;
            
            node.left = createTree(node.left, chars);
            node.right = createTree(node.right, chars);
        }

        return node;
    }

    @Override
    public void preOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }

        System.out.println(node.value);
        preOrderTraverse(node.left);
        preOrderTraverse(node.right);
    }

    @Override
    public void inOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }

        preOrderTraverse(node.left);
        System.out.println(node.value);
        preOrderTraverse(node.right);
    }

    @Override
    public void postOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }

        preOrderTraverse(node.left);
        preOrderTraverse(node.right);
        System.out.println(node.value);
    }
}

main,这里只展示调用的关键代码

        BinaryTreeNode node = new BinaryTreeNode();

        BinaryTreeOperate operate = new BinaryTreeOperateImpl() ;
        char[] chars = {'a','b','#','d','#','#','c','#','#'};
        operate.createTree(node, chars);
        operate.preOrderTraverse(node);

输出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值