笔试面试写算法中,对于树的操作都有一定的考察,有时候是单独的题,有时候树作为基础结构,
树的层序遍历较为常用,在数的几种遍历中也有一定难度
我们使用队列实现树的层序遍历
实现方法:定义一个TreeNode类型的队列,对数的节点进行遍历的时候,
先将根节点进入队列中,再依次遍历各个节点。即依次从队中弹出,直到对空。
即当某个节点出队时,对其进行访问(visit),同时将其左儿子和右儿子进行入队。
(声明一个nul节点值为-1,当某节点为空时,入栈,打印时即可打印出-1)
层序遍历类:
package Tree;
import java.util.LinkedList;
import java.util.Queue;
public class CengXuBianLi {
Queue<TreeNode> tmp= new LinkedList<TreeNode>();
public void LevelTraverse(TreeNode node)
{
TreeNode n=new TreeNode(0);
TreeNode nul=new TreeNode(-1);
if(node!=null)
{
tmp.add(node);
}
while(!tmp.isEmpty())
{
n=tmp.poll();
System.out.print(n.val+"/");
if(n.left!=null)
{
tmp.add(n.left);
}
else if(n.left==null&&n.right!=null)
{
tmp.add(nul);
}
if(n.right!=null)
{
tmp.add(n.right);
}
else if(n.left!=null&&n.right==null)
{
tmp.add(nul);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode t1=new TreeNode(10);
t1.left=new TreeNode(9);
t1.right=new TreeNode(8);
t1.left.left=new TreeNode(7);
// t1.left.right=new TreeNode(6);
t1.right.left=new TreeNode(5);
t1.right.right=new TreeNode(4);
new CengXuBianLi().LevelTraverse(t1);
}
}
树节点的类
package Tree;
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}