版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40301026/article/details/88782668
层序遍历也就是从左向右一层一层的遍历,直到结束。下图是一个二叉树,并且层序去遍历
如何用代码来实现此算法?
核心:利用队列先进后出的特征,先让根结点入队,接着开始循环一下操作,出队,出队的结点左孩子,右孩子入队。直到队列为null
下图是对上面二叉树的层序遍历的描述。蓝色数字2到11则是循环的操作。红字是每次循环的具体操作。出队循序就是层序遍历的顺序。
树的结点定义:
package cn.liu.BinaryTree;
/**
* 二叉链表的结点
* @author Administrator
*
*/
public class Node {
private Object data;//数据域
private Node leftChild;//左孩子(左子树)
private Node rightChild;//右孩子(右子树)
public Node() {
super();
}
public Node(Object data) {
super();
this.data = data;
}
public Node(Object data, Node leftChild, Node rightChild) {
super();
this.data = data;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
@Override
public String toString() {
return "Node [data=" + data + ", leftChild=" + leftChild + ", rightChild=" + rightChild + "]";
}
}
层序遍历:
package cn.liu.BinaryTree;
import java.util.LinkedList;
import java.util.Queue;
/**
* 二叉树的层序遍历
* 思路:利用队列先进后出的特性,
* 先让根结点入队列,对下面2步进行循环。
* 1.队列不为null,则出队。
* 2.若左孩子不为null,入队,若右孩子不为null,出队。
* 最后直到队列为空
* @author Administrator
*
*/
public class Demo3 {
private Node root;//根结点
public Demo3(Node root) {
super();
this.root = root;
}
public void levelTraversal() {
if(root == null) return ;//根为为null结束
Queue<Node> queue = new LinkedList<>();//建立队列
queue.offer(root);//根入队列
System.out.println("层序遍历为:");
while(queue.size()!=0) {
int len = queue.size();//统计现在队列元素个数
for(int i =0; i<len;i++) {
Node temp = queue.poll();//出队
System.out.print(temp.getData()+" ");
if(temp.getLeftChild()!=null) queue.offer(temp.getLeftChild());//左孩子入队
if(temp.getRightChild()!=null) queue.offer(temp.getRightChild());//右孩子入队
}
}
}
}
测试:
package cn.liu.BinaryTree;
public class TestDemo {
public static void main(String[] args) {
//创建一个二叉树
Node node10 = new Node(10, null, null);
Node node9 = new Node(9, null, null);
Node node8 = new Node(8, null, null);
Node node7 = new Node(7, null, null);
Node node6 = new Node(6, node10, null);
Node node5 = new Node(5, node8, node9);
Node node4 = new Node(4, node7, null);
Node node3 = new Node(3, null, node6);
Node node2 = new Node(2, node4, node5);
Node node1 = new Node(1,node2,node3);
Demo3 tt = new Demo3(node1);
tt.levelTraversal();
}
}