【图解算法】-CH1二叉树层级遍历

 

算法描述

从上往下,从左往右,层级遍历二叉树

解题思路

  1. 初始化head和tail标识在队列前
  2. 将节点放入队列,并同时移动tail标识同步往后
  3. head标识每次前进1,读取节点,并将该节点的左右子节点依次放入队列,同时移动tail节点到末尾
  4. 直到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);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值