• 二叉树的遍历


    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.Stack;

    public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    public TreeNode(int val) {
    this.val = val;
    }
    //先序遍历
    public static ArrayList<Integer> preOrder(TreeNode root)
    {
    ArrayList<Integer> list = new ArrayList<Integer>();
    if(root == null) return null;
    list.add(root.val);
    if(root.left!=null) list.addAll(preOrder(root.left));
    if(root.right!=null) list.addAll(preOrder(root.right));
    return list;
    }
    //中序遍历
    public static ArrayList<Integer> inOrder(TreeNode root)
    {
    ArrayList<Integer> list = new ArrayList<Integer>();
    if(root == null) return null;
    if(root.left!=null) list.addAll(inOrder(root.left));
    list.add(root.val);
    if(root.right!=null) list.addAll(inOrder(root.right));
    return list;
    }

    //后序遍历
    public static ArrayList<Integer> postOrder(TreeNode root)
    {
    ArrayList<Integer> list = new ArrayList<Integer>();
    if(root == null) return null;
    if(root.left!=null) list.addAll(postOrder(root.left));
    if(root.right!=null) list.addAll(postOrder(root.right));
    list.add(root.val);
    return list;
    }

    //广度优先遍历
    public static ArrayList<Integer> levelTraverse(TreeNode root) {
    if (root == null) {
    return null;
    }
    ArrayList<Integer> list = new ArrayList<Integer>();
    LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(root);
    while (!queue.isEmpty()) {
    TreeNode node = queue.poll();
    list.add(node.val);
    if (node.left != null) {
    queue.offer(node.left);
    }
    if (node.right != null) {
    queue.offer(node.right);
    }
    }
    return list;
    }

    //深度优先遍历
    public static ArrayList<Integer> DFSTraverse(TreeNode root) {
    if (root == null) {
    return null;
    }
    ArrayList<Integer> list = new ArrayList<Integer>();
    Stack<TreeNode> stack= new Stack<TreeNode>();
    stack.push(root);
    while (!stack.isEmpty()) {
    TreeNode node = stack.pop();
    list.add(node.val);
    if (node.right != null) {
    stack.push(node.right);
    }
    if (node.left != null) {
    stack.push(node.left);
    }
    }
    return list;
    }

    public static void main(String[] args)
    {
    TreeNode one = new TreeNode(1);
    TreeNode two = new TreeNode(2);
    TreeNode three = new TreeNode(3);
    TreeNode four = new TreeNode(4);
    TreeNode five = new TreeNode(5);
    one.left = three;
    one.right = five;
    five.left = two;
    five.right = four;
    // ArrayList<Integer> list = TreeNode.levelTraverse(one);
    // ArrayList<Integer> list = TreeNode.preOrder(one);
    // ArrayList<Integer> list = TreeNode.inOrder(one);
    // ArrayList<Integer> list = TreeNode.postOrder(one);
    ArrayList<Integer> list = TreeNode.DFSTraverse(one);
    Iterator<Integer> it = list.iterator();
    while(it.hasNext())
    {
    System.out.print(it.next());
    }
    }

    }
  • 相关阅读:
    Badboy录制脚本时,提示脚本错误解决方法
    Python数据类型_列表
    Wannafly Primary School Students训练记录
    Deadline队伍训练实录
    2018 German Collegiate Programming Contest (GCPC 18)
    2016ccpc杭州
    2016 ICPC 大连
    2017CCPC Final (哈尔滨)
    2017CCPC 长春
    2017 CCPC 杭州
  • 原文地址:https://www.cnblogs.com/moxia1234/p/11386034.html
Copyright © 2020-2023  润新知