zoukankan      html  css  js  c++  java
  • 二叉树的非递归遍历





    1. 递归实现


    先序

    public void preOrder(){
        preOrder(root);
    }
    private void preOrder(Node node){
        if(node != null){
            System.out.println(node.value);
            preOrder(node.left);
            preOrder(node.right);
        }
    }
    

    中序

    public void midOrder(){
        midOrder(root);
    }
    private void midOrder(Node node){
        if(node != null){
            midOrder(node.left);
            System.out.println(node.value);
            midOrder(node.right);
        }
    }
    

    后序

    public void postOrder(){
        postOrder(root);
    }
    private void postOrder(Node node){
        if(node != null){
            postOrder(node.left);
            postOrder(node.right);
            System.out.println(node.value);
        }
    }
    




    2. 非递归


    前序

    public void preOrderNew(){
        preOrderNew(root);
    }
    private void preOrderNew(Node node){
        if(node != null){
            LinkedList<Node> list = new LinkedList();
            list.addFirst(node);
    
            while(!list.isEmpty()){
                Node temp = (Node) list.removeFirst();
                if(temp.right != null){
                    list.addFirst(temp.right);
                }
                if(temp.left != null){
                    list.addFirst(temp.left);
                }
                System.out.println(temp.value);
            }
        }
    }
    

    中序

    public void midOrderNew(){
        midOrderNew(root);
    }
    private void midOrderNew(Node node){
        LinkedList<Node> list = new LinkedList();
        while(!list.isEmpty() || node != null){
            if(node != null){
                list.addFirst(node);
                node = node.left;
            }else{
                node = list.removeFirst();
                System.out.println(node.value);
                node = node.right;
            }
        }
    }
    

    后序

    public void postOrderNew(){
        postOrderNew(root);
    }
    private void postOrderNew(Node node){
        if(node != null){
            LinkedList<Node> list1 = new LinkedList();
            LinkedList<Node> list2 = new LinkedList();
            list1.addFirst(node);
    
            while(!list1.isEmpty()){
                Node temp = list1.removeFirst();
                list2.addFirst(temp);
                if(temp.left != null){
                    list1.addFirst(temp.left);
                }
                if(temp.right != null){
                    list1.addFirst(temp.right);
                }
            }
            while(!list2.isEmpty()){
                Node temp = list2.removeFirst();
                System.out.println(temp.value);
            }
        }
    }
    


  • 相关阅读:
    css笔记
    CSS基础
    HTML常用基础标签
    React-Native中列表SectionList学习
    React-Native中列表FlatList配合网络请求fetch学习
    React-Native选项卡(react-navigation)之createBottomTabNavigator学习
    React-Native导航条(react-navigation)之createStackNavigator学习
    iOS中touch事件传递(响应者链)
    ios中UIView和CALayer关系
    iOS中KVO使用理解
  • 原文地址:https://www.cnblogs.com/Howlet/p/12812648.html
Copyright © 2011-2022 走看看