算法描述
从上往下,从左往右,层级遍历二叉树
解题思路
- 初始化head和tail标识在队列前
- 将节点放入队列,并同时移动tail标识同步往后
- head标识每次前进1,读取节点,并将该节点的左右子节点依次放入队列,同时移动tail节点到末尾
- 直到head标识移动到tail位置
图解示例
代码实现
//节点类
public class TreeNode {
private String data;
private TreeNode left;
private TreeNode right;
public TreeNode(String data) {
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
//层级遍历
public class Ch1 {
public void LevelTree(TreeNode treeNode, int len) {
TreeNode p;
TreeNode[] q = new TreeNode[len];
int head = -1, tail = -1;
if (treeNode != null) {
tail = tail + 1;
q[tail] = treeNode;
}
while (head != tail) {
head = head + 1;
p = q[head];
System.out.println(p.getData());
if (p.getLeft() != null) {
tail = tail + 1;
q[tail] = p.getLeft();
}
if (p.getRight() != null) {
tail = tail + 1;
q[tail] = p.getRight();
}
}
}
}
//测试驱动
public class Client {
public static void main(String[] args) {
TreeNode a = new TreeNode("A");
TreeNode b = new TreeNode("B");
TreeNode c = new TreeNode("C");
TreeNode d = new TreeNode("D");
TreeNode e = new TreeNode("E");
TreeNode f = new TreeNode("F");
TreeNode g = new TreeNode("G");
TreeNode h = new TreeNode("H");
TreeNode i = new TreeNode("I");
d.setLeft(h);
d.setRight(i);
b.setLeft(d);
b.setRight(e);
c.setLeft(f);
c.setRight(g);
a.setLeft(b);
a.setRight(c);
Ch1 ch1 = new Ch1();
ch1.LevelTree(a, 9);
}
}