二叉树的层序遍历

笔试面试写算法中,对于树的操作都有一定的考察,有时候是单独的题,有时候树作为基础结构,

树的层序遍历较为常用,在数的几种遍历中也有一定难度

我们使用队列实现树的层序遍历

实现方法:定义一个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;

	    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值