先序遍历和后序遍历区别和代码实现

过程都一样,都是自上而下,自左向右一一遍历,不同的是先序遍历求的是儿子,后序遍历求的是老子

 

先序遍历:从上往下,从左至右,依次遍历

中序遍历,可以把每个节点看作数学中的括号,然后是左节点,节点,右节点

后序遍历:从下往上,自左向右遍历。

代码实现:

package sort;

import java.util.LinkedList;

public class pre_mid_after_sort {


    public static  int[] array = new int[]{1,2,3,4,5,6,7,8,9,10};

    public static void main(String[] args) {

        LinkedList<Node> node = createNode(array);
        Node node1 = node.get(0);

        preNode(node1);

    }



    /**
     * 内部类:
     * 方法内部类,就是类中的方法还有一个类
     */
    private static class Node{
        int data;
        Node letfNode;
        Node rightNode;

        public Node(int data) {
            this.data = data;
            this.letfNode =null;
            this.rightNode = null;
            
        }
        
        }
        
    public static LinkedList<Node> createNode(int[] array){
        //添加元素
        final LinkedList<Node> nodes = new LinkedList<>();
        for (int i = 0; i < array.length; i++) {
            nodes.add(new Node(array[i]));
        }
        //将各个节点指针对应一下
        for (int index = 0; index < nodes.size()/2 - 1; index++) {
            nodes.get(index).letfNode = nodes.get(index * 2 + 1);
            nodes.get(index).rightNode = nodes.get((index * 2 + 2));
        }

            nodes.get(nodes.size()/2 - 1).letfNode = nodes.get(nodes.size() - 1);
        if(nodes.size()%2 == 1)

            nodes.get(nodes.size()/2 - 1).rightNode = nodes.get(nodes.size() - 1);

        return nodes;


        }







    public static void preNode(Node node){
        if(node == null )
            return;
        System.out.println(node+" ");
        preNode(node.letfNode);
        preNode(node.rightNode);


    }
    public static void midNode(Node node){
        if(node == null)
            return;

        midNode(node.letfNode);
        System.out.println(node+" ");
        midNode(node.rightNode);
    }

    public static void afterNode(Node node){
        if(node == null)
            return;

        afterNode(node.letfNode);
        afterNode(node.rightNode);
        System.out.println(node+" ");
    }





}

 

 

 

posted @ 2020-05-22 02:50  七月在野,八月在宇  阅读(630)  评论(0编辑  收藏  举报