二叉树的层次遍历
层次遍历:简单点说就是按照从上到下的层次一层一层往下,每一层都按顺序遍历。
如图,遍历的结果应该是:ABCFEGD
层次遍历的步骤是:
1.对于不为空的结点,先把该结点加入到队列中
2.从队中拿出结点,如果该结点的左右结点不为空,就分别把左右结点加入到队列中
3.重复以上操作直到队列为空
public class NodeLevelPrint {
public void levelPrint(MyTreeNode root){
if(root==null){
return;
}
LinkedList<MyTreeNode> list=new LinkedList<>();
list.add(root);
MyTreeNode curr;
while (!list.isEmpty()){
curr=list.poll();
System.out.print(curr.data.toString()+" ");
if(curr.left!=null){
list.add(curr.left);
}
if(curr.right!=null){
list.add(curr.right);
}
}
}
public static void main(String[] args) {
MyTreeNode<Character> G = new MyTreeNode<Character>('G', null, null);
MyTreeNode<Character> E = new MyTreeNode<Character>('E', null, null);
MyTreeNode<Character> D = new MyTreeNode<Character>('D', null, null);
MyTreeNode<Character> F = new MyTreeNode<Character>('F', D, null);
MyTreeNode<Character> C = new MyTreeNode<Character>('C', E, G);
MyTreeNode<Character> B = new MyTreeNode<Character>('B', null, F);
MyTreeNode<Character> A = new MyTreeNode<Character>('A', B, C);
NodeLevelPrint nodeLevelPrint=new NodeLevelPrint();
nodeLevelPrint.levelPrint(A);
}
static class MyTreeNode<T> {
private T data;
private MyTreeNode left;
private MyTreeNode right;
public MyTreeNode(T data, MyTreeNode left, MyTreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}
}
测试结果
A B C F E G D