数据结构之有序二叉树(2):构建与输出

我们之前已经学习过单链表的构建,而二叉树的构建和单链表大同小异。

还是先写一个类来构建二叉树的节点。

public class TreeNode {
    public Integer value;
    public TreeNode leftChild;
    public TreeNode rightChild;
    public TreeNode(Integer value) {this.value=value;}
}

然后再定义一个测试类方便后续测试。

public class Test {
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree(1);
        BinaryTree binaryTree = new BinaryTree(2);
        BinaryTree binaryTree = new BinaryTree(3);
}

现在的话我们只是构建了三个毫不相干的节点,为了让它们联系起来形成二叉树,我们还得创建一个管理类并写相应的方法来构建二叉树以及实现对二叉树的一些基本操作。

构建二叉树有两种方法。

方法一:

public class BinaryTree {

    /**
     * 定义当前整棵树的记录
     */
    public TreeNode root;
    public void insert(Integer value) {
        //新建一个节点
        TreeNode newNode = new TreeNode(value);
        if (root == null) {
            root = newNode;
            return;
        }
        //创建节点进行遍历
        TreeNode currentNode = root;
        TreeNode parentNode;
        while(true){
            parentNode = currentNode;
            if(newNode.value > currentNode.value) {
                currentNode = currentNode.rightChild;
                if(currentNode == null){
                    parentNode.rightChild = newNode;
                    return;
                }
            } else{
                currentNode = currentNode.leftChild;
                if(currentNode == null){
                    parentNode.leftChild = newNode;
                    return;
                }
            }
        }
    }

方法二(递归):

public TreeNode insert(Integer value, TreeNode node){
        //新建一个节点
        TreeNode newNode = new TreeNode(value);
        if (root == null) {
            root = node;
            return root = newNode;
        }
        if(node.value < value){
            if(node.rightChild == null){
                node.rightChild = newNode;
                return root;
            }
            return insert(value,node.rightChild);
        } else {
            return insert(value,node.leftChild);
        }
    }

二叉树的输出我们可以利用jdk当中的队列来实现。

  // 队列 --> 一个数组 / 链表 --> 入队列和出队列的方法
    // add() pop()
    public void Order(){
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()){
            TreeNode treeNode = queue.pop();
            System.out.println(treeNode.value);
            if (treeNode.leftChild != null){
                queue.add(treeNode.leftChild);
            }
            if (treeNode.rightChild !=null){
                queue.add(treeNode.rightChild);
            }
        }
    }

主要用的是add方法(节点的添加)和pop方法(输出头结点)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beau Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值