[Java]java实现二叉树遍历

本文介绍如何使用Java创建二叉树并实现前序、中序和后序遍历。通过定义TreeNode和BinaryTree类,构建了一个具体的二叉树实例,并演示了三种不同的遍历方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们来用java构造一下下图中的二叉树,并实现该二叉树的前序、中序和后序遍历。

这里写图片描述

二叉树都是由节点组成的,所以我们首先要有个节点类。

TreeNode类代码:

public class TreeNode {
    private int num;
    private TreeNode leftChild = null;
    private TreeNode rightChild = null;

    public TreeNode(int num) {
        this.num = num;
    }

    public void printNode(){
        System.out.println(this.getNum());
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }


    public void setLeftChild(TreeNode node) {
        this.leftChild = node;

    }

    public void setRightChild(TreeNode node) {
        this.rightChild = node;

    }

    public TreeNode getLeftChild() {
        return leftChild;
    }

    public TreeNode getRightChild() {
        return rightChild;
    }
}

然后就可以构建二叉树了,每个二叉树的节点都有一个值,然后此节点又包含一个左子节点和一个右子节点。

BinaryTree类代码:

public class BinaryTree {
    private TreeNode root=null; 

    public void createBinaryTree(){
        root = new TreeNode(1);

        TreeNode node1 = new TreeNode(2);
        TreeNode node2 = new TreeNode(3);
        TreeNode node3 = new TreeNode(4);
        TreeNode node4 = new TreeNode(5);
        TreeNode node5 = new TreeNode(6);
        TreeNode node6 = new TreeNode(7);

        root.setLeftChild(node1);
        root.setRightChild(node2);
        node1.setLeftChild(node3);
        node1.setRightChild(node4);
        node2.setLeftChild(node5);
        node2.setRightChild(node6);
    }

    // 前序遍历
    public void preOrder(TreeNode subTree){
        if(subTree != null){
            subTree.printNode();
            preOrder(subTree.getLeftChild());
            preOrder(subTree.getRightChild());
        }
    }

    // 中序遍历
    public void inOrder(TreeNode subTree){
        if(subTree != null){
            inOrder(subTree.getLeftChild());
            subTree.printNode();
            inOrder(subTree.getRightChild());
        }
    }

    // 后序遍历
    public void postOrder(TreeNode subTree){
        if(subTree != null){
            postOrder(subTree.getLeftChild());
            postOrder(subTree.getRightChild());
            subTree.printNode();
        }
    }

    public TreeNode getRoot() {
        return this.root;
    }
}

好了,可以再写个类测试一下遍历效果。

TestTree类代码:

public class TestTree {
    public static void main(String[] args) {
        BinaryTree bTree = new BinaryTree();
        bTree.createBinaryTree();

        // 前序遍历
        System.out.println("--------前序遍历----------start");
        bTree.preOrder(bTree.getRoot());
        System.out.println("--------前序遍历----------end");

        // 中序遍历
        System.out.println("--------中序遍历----------start");
        bTree.inOrder(bTree.getRoot());
        System.out.println("--------中序遍历----------end");

        // 后序遍历
        System.out.println("--------后序遍历----------start");
        bTree.postOrder(bTree.getRoot());
        System.out.println("--------后序遍历----------end");
    }
}

输出结果如下:

——–前序遍历———-start
1
2
4
5
3
6
7
——–前序遍历———-end
——–中序遍历———-start
4
2
5
1
6
3
7
——–中序遍历———-end
——–后序遍历———-start
4
5
2
6
7
3
1
——–后序遍历———-end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值