再帰的および非再帰的な方法で、二叉の木の最初の順序、中の順序、および後の順序を達成する.

3132 ワード

分析:
まず、ルートノードにアクセスして、左のツリーを巡回して、右のツリーを巡回します.
中順:左のサブツリーを巡回し、ルートノードにアクセスし、右のサブツリーを巡回します.
後の順序:左のサブツリーを巡回し、右のサブツリーを巡回してルートノードにアクセスします.
したがって、再帰的に実現するのは簡単です.
public class test3 {
    public class Node{
        private int value;
        private Node leftNode;
        private Node rightNode;
        public Node(int value){
            this.value = value;
        }
    }
    //    
    public void preOrder(Node root){
        if (root == null)
            return;
        System.out.println(root.value + "     ");
        preOrder(root.leftNode);
        preOrder(root.rightNode);
    }
    //    
    public void innerOrder(Node root){
        if (root == null)
            return;
        innerOrder(root.leftNode);
        System.out.println(root.value + "     ");
        innerOrder(root.rightNode);
    }
    //    
    public void posOrder(Node root){
        if (root == null)
            return;
        posOrder(root.leftNode);
        posOrder(root.rightNode);
        System.out.println(root.value + "     ");
    }
}
               
      
1、     stack,      stack 
2、 stack      ,  cur,  cur  ,  cur        ,  cur        
3、    2,  stack  
public void preUncur(Node root){
        if (root != null){
            Stack stack = new Stack<>();
            stack.add(root);
            while (!stack.isEmpty()){
                root = stack.pop();
                if (root.rightNode != null)
                    stack.add(root.rightNode);
                if (root.leftNode != null)
                    stack.add(root.leftNode);
            }
        }
    }
    
1、     stack
2、         ,           
3、  2
public void innerUncer(Node root){
        if (root != null){
            Stack stack = new Stack<>();
            stack.push(root);
            if (!stack.isEmpty() && root != null){
                if (root != null){
                    stack.push(root);
                    root = root.leftNode;
                }else {
                    root = stack.pop();
                    System.out.println(root.value + "");
                    root = root.rightNode;
                }
            }
        }
    }
    
1、     ,       stack   stack      stack1 ,
2、         ,   stack ,       ,  
3、  stack       stack1 ,  2
 public void posUncer(Node root){
        if (root != null){
            Stack stack = new Stack<>();
            Stack stack1 = new Stack<>();
            stack.push(root);
            if (!stack.isEmpty()){
                stack1.push(stack.pop());
                if (root.leftNode != null){
                    stack.push(root.leftNode);
                }
                if (root.rightNode != null)
                    stack.push(root.rightNode);
            }
            while (!stack1.isEmpty()){
                System.out.println(stack1.pop().value + "");
            }
        }
    }