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

在Java中实现树结构的遍历函数

发布时间:2023-05-28 06:52:46

树结构是一种非常重要的数据结构。在Java中,树结构可以使用节点、指针或列表来表示。树结构的遍历是指按照一定的顺序依次访问树中的所有节点,这是树结构的核心操作之一,在实际开发中经常使用。下面将介绍Java中实现树结构遍历函数的方法。

树结构遍历的种类

树结构遍历分为三种:

前序遍历:访问顺序为“根节点、左子树、右子树”。

中序遍历:访问顺序为“左子树、根节点、右子树”。

后序遍历:访问顺序为“左子树、右子树、根节点”。

Java中实现树结构遍历的方法

Java中实现树结构遍历的方法有两种:递归遍历和非递归遍历。其中,递归遍历是最基本的遍历方式,也是最常用的遍历方式。在递归遍历时,程序先访问节点的左子树,然后再访问节点的右子树。当所有节点都被访问完之后,树遍历就结束了。非递归遍历就是使用栈来实现的,具体实现方式如下:

1.前序遍历的非递归实现

public void preOrderTraversal(Node node){

    Stack<Node> stack = new Stack<>();

    while(node != null || !stack.isEmpty()){

        if(node != null){   

            System.out.print(node.val + " ");

            stack.push(node);  

            node = node.left;  

        }

        else {

            node = stack.pop();

            node = node.right;  

        }

    }

}

2.中序遍历的非递归实现

public void inOrderTraversal(Node root){

    Stack<Node> s = new Stack<Node>();

    Node node = root;

    while(node != null || !s.empty()){

        while(node != null){

            s.push(node);

            node=node.left;

        }

        if(!s.empty()){

            node=s.pop();

            System.out.print(node.val + " ");

            node=node.right;

        }

    }

}

3.后序遍历的非递归实现

public void postOrderTraversal(Node root){

    Stack<Node> s = new Stack<Node>();

    Node node = root;

    Node lastVisitNode = null; 

    while ( node != null || !s.empty() ){

        

        while (node != null){

            s.push(node);

            node = node.left;

        }

        node = s.peek();  

        if (node.right == null || node.right == lastVisitNode){  

            System.out.print(node.val + " ");

            s.pop();

            lastVisitNode = node;

            node = null;

        }

        else{

            node = node.right;

        }

    }

}

上述代码中,可以看到前序、中序和后序遍历的实现方法都是使用栈来实现的。

总结

树结构的遍历是计算机中基础算法之一,也是程序员需要掌握的基本技能之一。在Java中,实现树结构遍历有递归遍历和非递归遍历两种方式。递归是一种最基本的遍历方法,非递归遍历使用栈来实现,代码相对比较复杂。不过,掌握了这两种遍历方式,程序员就能够灵活地应对各种树遍历问题了。