剑指offer--把二叉树打印成多行

import java.util.*;
/**
 * @author shy_black
 * @date 2019/7/28 17:09
 * @Description:
 *      首先明确--> 需求为将二叉树的每一层节点值放入一个链表中,
 *         每一层节点又可以作为一个链表进行存储,所有先创建一个ArrayList<ArrayList<Integer>> queue
 *             而后创建ArrayList<Integer> out,作为queue的存储元素
 *             LinkedList<TreeNode> tree为作为真实运算每一层元素的的节点队列
 *             当tree链表不为空时,进行以下循环:
 *             now-->标记本层父节点元素个数,初始为1,当now==0时,表示本层元素已经遍历完毕
 *             next-->标记子节点元素个数,每加入一个子节点元素,next++,当本层元素遍历结束后(即now== 0)
 *             将存储本层元素的链表out作为queue的元素存储(queue.add(out)),随后next赋值给now,意为开始下一次遍历
 *             next赋值0,重新开始计算子节点元素个数。
 *
 */

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


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

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

    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {

        ArrayList<ArrayList<Integer>> queue = new ArrayList<> ();
        ArrayList<Integer> out = new ArrayList<>();
        LinkedList<TreeNode> tree = new LinkedList<>();
        tree.add(pRoot);
        int now = 1;
        int next = 0;
        if(pRoot == null)
            return queue;

        while(!tree.isEmpty()) {
            TreeNode cur = tree.remove();
            out.add(cur.val);
            now--;
            if(cur.left != null) {
                tree.add(cur.left);
                next++;
            }
            if(cur.right != null) {
                tree.add(cur.right);
                next++;
            }
            if(now == 0) {
                queue.add(out);
                out.clear();
                now = next;
                next = 0;
            }
        }
        return queue;


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值