按照层次遍历并打印二叉树
2017-07-30 00:35
197 查看
题目
按照层次遍历二叉树,并且按照层次输出二叉的节点思想:
1. 使用队列来存放每一层的元素
2. 使用两个指针,last和nlast,分别表示当前当前打印行的最右边的节点,nlast表示下一行最右边的节点。
3. 在循环开始,只是取队列的头元素,但是不移除它,然后输出后,判断其左孩子和右孩子是否存在,存在都加入队列中
4. 最后关键一步是,每个节点加入的时候,使nlast指向加入的节点。移除队列头节点(在一开始的时候,令last=root),然后判断last和移除的头结点是否相等,相等则换行,不相等则继续遍历。
package com.ahut.bitree; import java.util.ArrayDeque; import java.util.LinkedList; import java.util.Queue; public class PrintBiTree { public static void main(String[] args) { Node root = new Node(1); Node first = new Node(2); root.left = first; Node firth = new Node(4); first.left = firth; Node three = new Node(3); root.right = three; Node five = new Node(5); three.left = five; Node six = new Node(6); three.right = six; Node seven = new Node(7); five.left = seven; Node eight = new Node(8); five.right = eight; levelVisit(root); } private static void levelVisit(Node root) { Node last = root; Node nlast = null; Queue<Node> queue = new ArrayDeque<Node>(); queue.add(root); while (!queue.isEmpty()) { Node peek = queue.peek(); System.out.print(peek.data + " "); if (peek.left != null) { queue.add(peek.left); nlast = peek.left; } if (peek.right != null) { queue.add(peek.right); nlast = peek.right; } Node poll = queue.poll(); if (poll.equals(last)) { System.out.println(); last = nlast; } } } } class Node { public Node left; public Node right; int data; public Node(int data) { this.data = data; left = null; right = null; } }
相关文章推荐
- 二叉树的构建、层次打印、广度遍历、深度遍历、K值路径
- 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,
- 二叉树的层次遍历,从上往下打印二叉树
- 按之字形顺序打印二叉树(二叉树的层次遍历)
- 每日一练(38) - 从上往下打印二叉树(二叉树的层次遍历)
- 从上往下打印二叉树,层次遍历
- 按层打印二叉树的节点【层次遍历变形】
- 二叉树的层次遍历(打印)
- 剑指offer--从上往下打印二叉树--层次遍历、广度优先搜索
- 二叉树层次遍历的螺旋打印
- 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
- 19、从上到下打印二叉树(层次遍历)
- 二叉树的层次遍历,从上到下和从下到上分层打印
- 二叉树层次遍历打印
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- 设计一个算法,按照层次打印这棵二叉树。
- 按照层次打印二叉树
- 按照层次遍历二叉树