import java.util.Stack; public class test_04_23 { //二叉树的三种遍历 static class TreeNode{ int data; TreeNode left; TreeNode right; public TreeNode(int data){ this.data = data; } } //先序遍历 public static void test1(TreeNode root){ Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()){ TreeNode node = stack.pop(); System.out.println(node.data); if (node.right!=null){ stack.push(node.right); } if (node.left!=null){ stack.push(node.left); } } } //中序遍历 public static void test2(TreeNode root){ Stack<TreeNode> stack = new Stack<>(); TreeNode p = root; while (p!=null||!stack.isEmpty()){ if (p!=null){ stack.push(p); p=p.left; }else{ TreeNode node = stack.pop(); System.out.println(node.data); if (node.right!=null){ p=node.right; } } } } //后序遍历 public static void test3(TreeNode root){ Stack<TreeNode> stack = new Stack<>(); TreeNode p = root; TreeNode r = null; while (p!=null||!stack.isEmpty()){ if (p!=null){ stack.push(p); p=p.left; }else{ TreeNode pNode = stack.peek(); if (pNode.right!=null&&pNode.right!=r){ p=pNode.right; }else{ TreeNode node = stack.pop(); System.out.println(node.data); r = pNode; } } } } // 1 // 2 3 // 4 5 6 7 public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left=new TreeNode(2); root.right=new TreeNode(3); root.left.left=new TreeNode(4); root.left.right=new TreeNode(5); root.right.left=new TreeNode(6); root.right.right=new TreeNode(7); test3(root); } }