欢迎访问宙启技术站
智能推送

使用Java函数实现树的遍历(先序、中序、后序)

发布时间:2023-10-07 03:50:11

树是一种常见的数据结构,具有层次性和分支性。树的遍历是指按照某一顺序,依次访问树中的每个节点,且每个节点只访问一次。常见的树的遍历方式有先序遍历、中序遍历和后序遍历。下面将使用Java编程语言实现这三种遍历方式。

首先,我们需要定义一个树节点的类Node,包含一个value属性表示节点的值,以及left和right两个属性分别表示节点的左子树和右子树。代码如下:

class Node {
    int value;
    Node left;
    Node right;

    public Node(int value) {
        this.value = value;
    }
}

接下来,我们定义一个树的类Tree,包含根节点root的属性,以及实现三种遍历方式的函数。其中,先序遍历使用递归方式实现,中序遍历和后序遍历使用迭代方式实现。代码如下:

import java.util.Stack;

class Tree {
    Node root;

    public Tree(Node root) {
        this.root = root;
    }

    // 先序遍历:根节点 -> 左子树 -> 右子树
    public void preOrderTraversal(Node node) {
        if (node != null) {
            System.out.print(node.value + " ");
            preOrderTraversal(node.left);
            preOrderTraversal(node.right);
        }
    }

    // 中序遍历:左子树 -> 根节点 -> 右子树
    public void inOrderTraversal(Node node) {
        Stack<Node> stack = new Stack<>();
        while (node != null || !stack.isEmpty()) {
            while (node != null) {
                stack.push(node);
                node = node.left;
            }
            node = stack.pop();
            System.out.print(node.value + " ");
            node = node.right;
        }
    }

    // 后序遍历:左子树 -> 右子树 -> 根节点
    public void postOrderTraversal(Node node) {
        Stack<Node> stack = new Stack<>();
        Node lastNodeVisited = null;
        while (node != null || !stack.isEmpty()) {
            if (node != null) {
                stack.push(node);
                node = node.left;
            } else {
                Node peekNode = stack.peek();
                // 如果右子树存在,并且没有被访问过,则遍历右子树
                if (peekNode.right != null && peekNode.right != lastNodeVisited) {
                    node = peekNode.right;
                } else {
                    System.out.print(peekNode.value + " ");
                    lastNodeVisited = stack.pop();
                }
            }
        }
    }
}

接下来我们可以创建一个简单的树并进行遍历。代码如下:

public class Main {
    public static void main(String[] args) {
        // 创建一个二叉树
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.left.right = new Node(5);
        root.right.left = new Node(6);
        root.right.right = new Node(7);

        Tree tree = new Tree(root);

        System.out.print("先序遍历结果:");
        tree.preOrderTraversal(root);

        System.out.print("
中序遍历结果:");
        tree.inOrderTraversal(root);

        System.out.print("
后序遍历结果:");
        tree.postOrderTraversal(root);

    }
}

以上代码中,我们创建了一个二叉树,并分别使用先序、中序和后序遍历进行输出。输出结果为:

先序遍历结果:1 2 4 5 3 6 7 
中序遍历结果:4 2 5 1 6 3 7 
后序遍历结果:4 5 2 6 7 3 1 

以上就是使用Java函数实现树的遍历的方法和代码。通过这些代码,我们可以了解树的遍历原理并进行实际应用和实现。