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


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

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

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

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

    代码实现:

    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+" ");
        }
    
    
    
    
    
    }

  • 相关阅读:
    我参与过的开源项目
    chineking / WeiboCrawler / wiki / Home — Bitbucket
    PIL应用之生成验证码图片
    hurl
    Hadoop笔记之安装及伪分布式模式配置
    httpbin(1): HTTP Client Testing Service
    动态规划求编辑距离 残阳似血的博客
    cppreference.com
    sscanf
    在python中定义二维数组
  • 原文地址:https://www.cnblogs.com/guosai1500581464/p/12934788.html
Copyright © 2020-2023  润新知