• 毕业了-java二叉树层次遍历算法


    /***************************************     
     * 时间:2017年6月23日      
     * author:lcy     
     * 内容:二叉树的层次遍历      
     * 需要借助队列这个数据结构,直接import就可以了
     *     1.首先将根节点放入队列中。 
           2.当队列为非空时,循环执行步骤3到步骤5,否则执行6; 
           3.出队列取得一个结点,访问该结点; 
           4.若该结点的左子树为非空,则将该结点的左子树入队列; 
           5.若该结点的右子树为非空,则将该结点的右子树入队列; 
           6.结束。
     ***************************************/    
    import java.util.ArrayDeque;     
    import java.util.Queue;    
    
    public class BinTree {
        private char date;
        private BinTree lchild;   //左孩子
        private BinTree rchild;   //右孩子
        
        private BinTree(char c ){
            date = c;
        }
     
        
        public static void BFSOrder(BinTree T)
        {
            if(T==null) return ;
            Queue<BinTree> queue = new ArrayDeque<BinTree>();    
            //队列小知识:使用offer和poll优于add和remove之处在于它们返回值可以判断成功与否,而不抛出异常
        
            queue.offer(T);              //算法1:根结点进入队列
            while(!queue.isEmpty())      //算法2:若队列非空,循环执行步骤 3-5,否则执行步骤6
            {
                T=queue.poll();          //算法3:将一个结点出队列,并访问该结点
                System.out.print(T.date);
                if(T.lchild!=null)       //算法4:若该结点的左子树为非空,则将该结点的左孩子结点入队列;
                    queue.offer(T.lchild);
                if(T.rchild!=null)       //算法5:若该结点的左子树为非空,则将该结点的右孩子结点入队列;
                    queue.offer(T.rchild);    
            }
            //步骤6结束
        }
        
        
        
        public static void main(String[] args) {
             BinTree b1 = new BinTree('a');
             BinTree b2 = new BinTree('b');
             BinTree b3 = new BinTree('c');
             BinTree b4 = new BinTree('d');
             BinTree b5 = new BinTree('e');
             BinTree b6 = new BinTree('f');
             BinTree b7 = new BinTree('g');
        
            /**
             *      a 
             *    /   
             *   b     c
             *  /    / 
             * d   e f   g
             */
            b1.lchild = b2;
            b1.rchild = b3;
            b2.lchild = b4;
            b2.rchild = b5;
            b3.lchild = b6;
            b3.rchild = b7;
            System.out.println(12121);
    
            BinTree.BFSOrder(b1);
            System.out.println();    
            }
    }
    测试结果
     
  • 相关阅读:
    测试72.思维好题
    pbds:STL平衡树
    测试69。这场因为轻视少了很多分。
    C++ 中的四种类型转换
    C++ 中的static关键字
    codeforces 1269 E K Integers
    P4556 [Vani有约会]雨天的尾巴 (线段树合并)
    P3521 [POI2011]ROT-Tree Rotations (线段树合并)
    codeforces 600E E. Lomsat gelral (线段树合并)
    线段树合并的一些题
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7071117.html
Copyright © 2020-2023  润新知