zoukankan      html  css  js  c++  java
  • 二叉树的遍历

    二叉树的前序,中序,后序,层次遍历

    /** binary tree traversal methods */
    
    package dataStructures;
    
    public class BinaryTreeTraversal {
        /** visit method that prints the element in the node */
        public static void visit(BinaryTreeNode t) {
            System.out.print(t.element + " ");
        }
    
        /** preorder traversal */
        public static void preOrder(BinaryTreeNode t) {
            if (t != null) {
                visit(t); // visit tree root
                preOrder(t.leftChild); // do left subtree
                preOrder(t.rightChild); // do right subtree
            }
        }
    
        /** inorder traversal */
        public static void inOrder(BinaryTreeNode t) {
            if (t != null) {
                inOrder(t.leftChild); // do left subtree
                visit(t); // visit tree root
                inOrder(t.rightChild); // do right subtree
            }
        }
    
        /** postorder traversal */
        public static void postOrder(BinaryTreeNode t) {
            if (t != null) {
                postOrder(t.leftChild); // do left subtree
                postOrder(t.rightChild); // do right subtree
                visit(t); // visit tree root
            }
        }
    
        /** level order traversal 
         *  借助队列实现层次遍历
         * */
        public static void levelOrder(BinaryTreeNode t) {
            ArrayQueue q = new ArrayQueue();
            while (t != null) {
                visit(t); // visit t
    
                // put t's children on queue
                if (t.leftChild != null)
                    q.put(t.leftChild);
                if (t.rightChild != null)
                    q.put(t.rightChild);
    
                // get next node to visit
                t = (BinaryTreeNode) q.remove();
            }
        }
    
        /** test program */
        public static void main(String[] args) {
            BinaryTreeNode y = new BinaryTreeNode(new Integer(2));
            BinaryTreeNode z = new BinaryTreeNode(new Integer(3));
            BinaryTreeNode x = new BinaryTreeNode(new Integer(1), y, z);
            BinaryTreeNode m = new BinaryTreeNode(new Integer(5));
            BinaryTreeNode n = new BinaryTreeNode(new Integer(0), x, m);
    
            System.out.println("The elements in preorder are");
            preOrder(n);
            System.out.println();
    
            System.out.println("The elements in inorder are");
            inOrder(n);
            System.out.println();
    
            System.out.println("The elements in postorder are");
            postOrder(n);
            System.out.println();
    
            System.out.println("The elements in level order are");
            levelOrder(n);
        }
    }
  • 相关阅读:
    洛谷 P6599 「EZEC-2」异或 题解
    线段树懒标记以及标记永久化的两种实现方法(模板)
    洛谷P3834 【模板】可持久化线段树 1 题解
    Codeforces 1012B Chemical table (思维+二分图)
    HDU 6386 Age of Moyu (最短路+set)
    CodeForces 739B Alyona and a tree (二分+树上差分)
    Codeforces 444C DZY Loves Colors (线段树)
    HDU 5441 Travel (离线dsu)
    Codeforces 1000E We Need More Bosses (边双连通+最长链)
    CodeForces 219D Choosing Capital for Treeland (树形DP)经典
  • 原文地址:https://www.cnblogs.com/yuwenfeng/p/4225506.html
Copyright © 2011-2022 走看看