1. 程式人生 > >按層遍歷二叉樹並列印換行

按層遍歷二叉樹並列印換行

package com.zyl.algorithm;

import java.util.LinkedList;

public class PrintBinaryTreeByFloor {
	public static void main(String[] args) {
		// 初始化一顆二叉樹
		Node head = new Node(12);
		head.left = new Node(34);
		head.right = new Node(32);

		head.left.left = new Node(1);
		head.left.right = new Node(2);
head.right.right = new Node(3); head.left.left.left = new Node(5); head.left.left.right = new Node(6); print(head); } /* * 要求: * 按層遍歷二叉樹,列印換行 * 思路: * 使用兩個標記變數last和nlast,分別表示當前行的最後一個和下一行的最後一個,都初始化為head節點 * 使用佇列LinkedList,先放入head節點,之後每丟擲一個節點就把它不為空的孩子節點加入佇列 * 1.丟擲一個節點 * 2.如果其左右節點不為空則加入其孩子節點,沒加入一個節點,將其值賦值給nlast節點 * 3.如果丟擲的節點是last節點,說明一行列印完畢,需要換行.且現在的nlast節點是下一行的最右節點,將其賦值給last. 否則正常列印不換行 * 4.每加入一個節點就將其賦值給nlast,表示現有的最右節點 * 5.如果佇列不為空則繼續 */
public static void print(Node head) { LinkedList<Node> queue = new LinkedList<>(); Node last = head; Node nlast = head; queue.push(head); while (queue.size() != 0) { Node node = queue.removeFirst(); if (node.left != null) { queue.add(node.left); nlast = node.left;
} if (node.right != null) { queue.add(node.right); nlast = node.right; } if (node.equals(last)) { System.out.println(node.value); last = nlast; } else { System.out.print(node.value + " "); } } } } class Node { int value; Node left; Node right; public Node(int v) { value = v; } }