要求:
对于这种树的层次遍历,我们先要去创建一个队列,第二步就是设置两个指针,一个指向正在打印的当前行的最右节点,一个指向下一行的最右节点;代码如下
package Arithmatic;
import java.util.LinkedList;
/*
二叉树的构建
*/
class TreeNode{
TreeNode right;
TreeNode left;
int val;
public TreeNode(int val) {
this.val = val;
}
}
public class Tree {
/*
层次遍历
*/
public void Sort(TreeNode head){
if(head==null){
return ;
}
TreeNode last=head; //正在打印的当前行的最右节点
TreeNode nlast=head; //下一行的最节点
TreeNode node =null; //打印的当前节点
LinkedList<TreeNode> linkedList=new LinkedList<>(); //创建一个队列来经行树的节点的存取
linkedList.add(head); //将第一个节点添加到队列中
while (linkedList.size()!=0){ //当队列不为空就出队列
node = linkedList.poll();
if(node.left!=null){ //判断左节点是否存在
linkedList.add(node.left);
nlast=node.left;
}
if(node.right!=null){ //判断节点是否存在,并且将最右节点给nlast
linkedList.add(node.right);
nlast=node.right;
}
if(node==last){ //当前节点是last节点就换行并将nlast节点赋值给last节点
System.out.println(node.val+"\t");
last=nlast;
}else{
System.out.print(node.val+"\t"); //如果不是last节点就直接输出该节点
}
}
}
}