二叉树的遍历

来源:互联网 发布:爱普生清零软件中文版 编辑:程序博客网 时间:2024/06/03 21:30

二叉树的基本遍历,包括前序、中序和后序,实现方式有递归和非递归;

public class TreeNode {    Object val;    TreeNode left;    TreeNode right;    TreeNode(Object x) { val = x; }}
public class BinaryTreeTraversal {    public static void main(String[] args) {        TreeNode root = new TreeNode("A");        TreeNode l1 = new TreeNode("B");        TreeNode l2 = new TreeNode("C");        TreeNode l3 = new TreeNode("D");        TreeNode l4 = new TreeNode("E");        TreeNode l5 = new TreeNode("F");        root.left = l1;        l1.right = l2;        root.right = l3;        l3.left = l4;        l3.right = l5;        inOrder(root);        inOrder1(root);    }    public static void preOrder(TreeNode root){        if(root != null){            visit(root);            preOrder(root.left);            preOrder(root.right);        }    }    public static void inOrder(TreeNode root){        if(root != null){            inOrder(root.left);            visit(root);            inOrder(root.right);        }    }    public static void postOrder(TreeNode root){        if(root != null){            postOrder(root.left);            postOrder(root.right);            visit(root);        }    }    public static void preOrder1(TreeNode root){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode p = root;        while(p != null || !stack.empty()){            while(p != null){                visit(p);                stack.push(p);                p = p.left;            }            if(!stack.empty()){                p = stack.pop();                p = p.right;            }        }    }    public static void inOrder1(TreeNode root){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode p = root;        while(p != null || !stack.empty()){            while(p != null){                stack.push(p);                p=p.left;            }            if(!stack.empty()){                p = stack.pop();                visit(p);                p = p.right;            }        }    }    public static void postOrder1(TreeNode root){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode p = root, q=null;        while(p != null){            while(p != null){                stack.push(p);                p = p.left;            }            while(p != null && (p.right == null || p.right == q)){                visit(p);                q = p;                if(stack.empty()){                    return;                }                p = stack.pop();            }            stack.push(p);            p = p.right;        }    }
}

 
原创粉丝点击