二叉树的广度遍历想想还是比較简单的。利用队列存储当前结点的左儿子和右儿子用作未来的訪问。
代码实现
/**
* 源代码名称:TreeBFS.java
* 日期:2014-08-25
* 程序功能:二叉树广度遍历
* 版权:CopyRight@A2BGeek
* 作者:A2BGeek
*/
import java.util.LinkedList;
import java.util.Queue;
public class TreeBFS {
class TreeNode {
private T mNodeData;
private TreeNode mLeftChild;
private TreeNode mRightChild;
public TreeNode(T data, TreeNode left, TreeNode right) {
// TODO Auto-generated constructor stub
mNodeData = data;
mLeftChild = left;
mRightChild = right;
}
public T getData() {
return mNodeData;
}
public void setData(T data) {
mNodeData = data;
}
public TreeNode getLeft() {
return mLeftChild;
}
public void setLeft(TreeNode left) {
mLeftChild = left;
}
public TreeNode getRight() {
return mRightChild;
}
public void setRight(TreeNode right) {
mRightChild = right;
}
}
public TreeNode createTree() {
TreeNode h = new TreeNode("h", null, null);
TreeNode g = new TreeNode("g", null, null);
TreeNode f = new TreeNode("f", null, null);
TreeNode e = new TreeNode("e", null, null);
TreeNode d = new TreeNode("d", null, h);
TreeNode c = new TreeNode("c", f, g);
TreeNode b = new TreeNode("b", d, e);
TreeNode a = new TreeNode("a", b, c);
return a;
}
public void BFSIterate(TreeNode root) {
Queue> queue = new LinkedList>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(node.getData() + " ");
if (node.getLeft() != null) {
queue.offer(node.getLeft());
}
if (node.getRight() != null) {
queue.offer(node.getRight());
}
}
}
public static void main(String[] args) {
TreeBFS treeBFS = new TreeBFS();
TreeNode root = treeBFS.createTree();
treeBFS.BFSIterate(root);
}
}