二叉树的前中后序遍历的递归与非递归算法模版

Posted zhihaospace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的前中后序遍历的递归与非递归算法模版相关的知识,希望对你有一定的参考价值。

1.节点数据结构

public class Node {

    public int value;
    public Node left;
    public Node right;

    public Node(int data){
        this.value = value;
    }
}

2.递归

public class Recur {

    public void preOrderRecur(Node head){
        if (head == null){
            return;
        }

        System.out.println(head.value + " ");
        preOrderRecur(head.left);
        preOrderRecur(head.right);
    }

    public void inOrderRecur(Node head){
        if (head == null){
            return;
        }

        inOrderRecur(head.left);
        System.out.println(head.value + " ");
        inOrderRecur(head.right);
    }

    public void posOrderRecur(Node head){
        if (head == null){
            return;
        }

        posOrderRecur(head.left);
        posOrderRecur(head.right);
        System.out.println(head.value + " ");
    }
}

3.非递归

import java.util.Stack;

public class UnRecur {

    public void preOrderUnRecur(Node head) {
        System.out.println("pre-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<>();
            stack.add(head);
            while (!stack.isEmpty()) {
                head = stack.pop();
                System.out.println(head.value + " ");
                if (head.right != null) {
                    stack.push(head.right);
                }
                if (head.left != null) {
                    stack.push(head.left);
                }
            }
        }
    }

    public void inOrderUnRecur(Node head) {
        System.out.println("in-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<>();
            while (!stack.isEmpty() || head != null) {
                if (head != null) {
                    stack.push(head);
                    head = head.left;
                } else {
                    head = stack.pop();
                    System.out.println(head.value + " ");
                    head = head.right;
                }
            }
        }
    }

    public void posOrderUnRecur(Node head) {
        System.out.println("pos-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<>();
            stack.push(head);
            Node c;
            while (!stack.isEmpty()) {
                c = stack.peek();
                if (c.left != null && head != c.left && head != c.right) {
                    stack.push(c.left);
                } else if (c.right != null && head != c.right) {
                    stack.push(c.right);
                } else {
                    System.out.println(stack.pop().value + " ");
                    head = c;
                }
            }

        }
    }
}

 

以上是关于二叉树的前中后序遍历的递归与非递归算法模版的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的前中后序递归和非递归遍历操作代码

必须掌握,二叉树的前中后序遍历(迭代+递归)详细代码与思路

二叉树的前中后序遍历(java递归迭代分别实现)

二叉树的前中后序遍历简单的递归

二叉树的前中后序遍历(非递归实现)

非递归实现二叉树的前中后序遍历