树的三种后序遍历

来源:互联网 发布:mac如何更新flash 编辑:程序博客网 时间:2024/06/03 19:29

使用递归进行遍历

public static void afterOrder(BinaryTree root) {        if (root == null)            throw new IllegalArgumentException("请输入一棵树");        if (root.getLeft() != null)            afterOrder(root.getLeft());        if (root.getRight() != null)            afterOrder(root.getRight());        System.out.print(root.getData()+"\t");    }}

使用两个栈进行遍历

public static void afterOrderUnRecur(BinaryTree root) {        if (root == null)            throw new IllegalArgumentException("请输入一棵树");        if (root != null) {            Stack<BinaryTree> stack1 = new Stack<>();            Stack<BinaryTree> stack2 = new Stack<>();            stack1.push(root);            while (!stack1.isEmpty()) {                root = stack1.pop();                stack2.push(root);                if (root.getLeft() != null)                    stack1.push(root.getLeft());                if (root.getRight() != null)                    stack1.push(root.getRight());            }            while (!stack2.isEmpty()) {                System.out.print(stack2.pop().getData() + "\t");            }        }    }

使用一个栈进行遍历

 public static void afterOrderUnRecurUseOneStack(BinaryTree root) {        if (root != null) {            Stack<BinaryTree> stack = new Stack<>();            BinaryTree pre = null, curr;            stack.push(root);            while (!stack.isEmpty()){                curr = stack.peek();                if (pre != curr.getRight() && pre != curr.getLeft() && curr.getLeft() != null){                    stack.push(curr.getLeft());                } else if (pre != curr.getRight() && curr.getRight() != null){                    stack.push(curr.getRight());                } else {                    System.out.print(stack.pop().getData()+"\t");                    pre = curr;                }            }        }    }