毕业了-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();
        }
}测试结果
 
时间: 2024-12-24 23:00:48

毕业了-java二叉树层次遍历算法的相关文章

毕业了C++二叉树层次遍历

//代码经过测试,赋值粘贴即可用#include<iostream> #include<stdio.h> #include<stack> #include<queue> #include<malloc.h> using namespace std; //二叉树结点 typedef struct BTNode{ char data; struct BTNode *lchild; struct BTNode *rchild; }BTNode; //模

java 二叉树递归遍历算法

//递归中序遍历 public void inorder() { System.out.print("binaryTree递归中序遍历:"); inorderTraverseRecursion(root); System.out.println(); } //层次遍历 public void layerorder() { System.out.print("binaryTree层次遍历:"); LinkedList<Node<Integer>>

毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的

//代码进过测试,直接可以拿来用//关键就是那一点未透--队列.// 关键就是一个出队,一个入队操作.#include<iostream> #include<stdio.h> #include<stack> #include<queue> #include<malloc.h> # define MaxSize 100 using namespace std; //二叉树结点 typedef struct BTNode{ char data; st

第4章第1节练习题9 反向层次遍历算法

问题描述 试给出二叉树的自下而上,从右到左的层次遍历算法 算法思想 一般的二叉树层次遍历算法是自上向下,从左到右的遍历,这里的遍历顺序恰好相反,而运用栈先进后出的特点实现顺序的反转. 因此可以考虑在原来的层次遍历算法的基础上加上栈的基本操作.在出队的同时将各节点入栈,在所有的节点全部入栈后,依次出栈访问便可解决该问题. 算法描述 void InLevelOrder(BiTNode* T){ BiTNode *p=T; SqQueue Q; InitQueue(&Q); SqStack S; In

java实现二叉树层次遍历

public class BSTNode<T extends Comparable<T>> { T key; // 关键字(键值) BSTNode<T> left; // 左孩子 BSTNode<T> right; // 右孩子 BSTNode<T> parent; // 父结点 public BSTNode(T key, BSTNode<T> parent, BSTNode<T> left, BSTNode<T&g

用java实现二叉树的遍历算法

用java实现二叉树的遍历算法用java实现二叉树的遍历算法,编写二叉树类BinaryTree代码如下:package package2; public class BinaryTree { int data; //根节点数据BinaryTree left; //左子树BinaryTree right; //右子树 public BinaryTree(int data) //实例化二叉树类{this.data = data;left = null;right = null;} public vo

【数据结构】二叉树层次遍历

package 蓝桥练习; public class 二叉树层次遍历 { public static int MAXSIZE = 100; public static Node queue[] = new Node[MAXSIZE]; public static void main(String[] args) { Node h = new Node('H', null, null); Node i = new Node('I', null, null); Node f = new Node('

java 二叉树的遍历 为什么只给出前序以及后序遍历,不能生成唯一的二叉树

最近在学习java的数据结构与算法知识,看到数据结构 树的遍历的方式.在理解过程中.查看到一篇文章,视野非常有深度,在信息论的角度看待这个问题.在此贴出该文章的链接以及内容. [文章出处]http://www.binarythink.net/2012/12/binary-tree-info-theory/ 我们在学习二叉树的遍历时,都会不可避免的学到二叉树的三种遍历方式,分别是遵循(根-左-右)的前序遍历.遵循(左-根-右)的中序遍历以及遵循(左-右-根)的后序遍历.并且每一个二叉树都可以用这三

二叉树常见遍历算法

这几天在复习关于树的各种算法,做了一些题,也搜索了网上各种算法,现在来总结一下树的各种常见算法.本文涵盖: 二叉树先中后序遍历(递归&非递归)算法 层次遍历(正序&逆序&锯齿形)非递归算法 二叉树深度算法 结点总数算法 1.二叉树先序非递归遍历 //先序非递归遍历 public ArrayList<Integer> preorderTraversal2(TreeNode root) { Stack<TreeNode> stack = new Stack<