按照层次遍历并打印二叉树
来源:互联网 发布:gentoo linux 编辑:程序博客网 时间:2024/05/17 02:00
题目
按照层次遍历二叉树,并且按照层次输出二叉的节点
思想:
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; }}
阅读全文
0 0
- 按照层次遍历并打印二叉树
- 按照层次打印二叉树
- 按照层次遍历二叉树
- 构建一棵二叉树并按照层次遍历输出
- 二叉树层次遍历打印
- 二叉树层次遍历的螺旋打印
- 二叉树的层次遍历(打印)
- 设计一个算法,按照层次打印这棵二叉树。
- 按照层次打印二叉树算法C++实现
- 建立二叉树,并层次遍历输出
- 把二叉树打印成多行(二叉树的层次遍历)
- 层次遍历二叉树 并输出遍历结果
- [牛客]有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
- 层次打印二叉树
- 层次打印二叉树
- 层次打印二叉树
- 二叉树的层次遍历,从上到下和从下到上分层打印
- 从上往下打印二叉树,层次遍历
- 算法竞赛入门经典 第二章 循环
- 聚类总结(中)——密度聚类
- Python制作Mac软件(实践中)
- 51nod 1534 棋子游戏
- Django学习笔记五:通过nginx+uwsgi部署Django项目(暂时静态文件没有部署上去)
- 按照层次遍历并打印二叉树
- ReactNative初体验
- 实习前十天总结
- 学习Markdown
- LeetCode
- HDU1556 树状数组,线段树区间更新两种方法(主要树状数组)
- Java注解
- numpy的random模块
- C++中不能重载的运算符