Q22_把二叉树打印成多行

该博客主要介绍了如何按照层次从上到下、从左至右逐行打印二叉树的节点。
摘要由CSDN通过智能技术生成

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

package Proxy;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class TreeNode {
	int val = 0;
	TreeNode left = null;
	TreeNode right = null;

	public TreeNode(int val) {
		this.val = val;

	}

}

public class Q22_把二叉树打印成多行 {

	class Solution {
		ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {

			if (pRoot == null) {
				return new ArrayList<ArrayList<Integer>>();
			}

			// 层次遍历
			ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
			Queue<TreeNode> queue1 = new LinkedList<TreeNode>(); // 奇数行队列
			Queue<TreeNode> queue2 = new LinkedList<TreeNode>(); // 偶数行队列

			queue1.add(pRoot);

			while (!queue1.isEmpty() || !queue2.isEmpty()) {

				// 如果queue1不空,queue2空
				if (!queue1.isEmpty()) {
					ArrayList<Integer> hang = new ArrayList<Integer>();
					// 输出queue1所有节点
					while (!queue1.isEmpty()) {
						TreeNode curNode = queue1.poll();
						hang.add(curNode.val);
						if (curNode.left != null) {
							queue2.add(curNode.left);
						}
						if (curNode.right != null) {
							queue2.add(curNode.right);
						}
					}
					result.add(hang);
				}

				// 如果queue2非空,queue1空
				if (!queue2.isEmpty()) {
					ArrayList<Integer> hang = new ArrayList<Integer>();
					// 输出queue2所有节点
					while (!queue2.isEmpty()) {
						TreeNode curNode = queue2.poll();
						hang.add(curNode.val);
						if (curNode.left != null) {
							queue1.add(curNode.left);
						}
						if (curNode.right != null) {
							queue1.add(curNode.right);
						}
					}
					result.add(hang);
				}
			}

			// 处理完毕,输出
			return result;
		}

	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值