/**************************************************************
* Copyright (c) 2016,
* All rights reserved.
* 版 本 號:v1.0
* 題目描述:把二叉樹打印成多行
* 從上到下按層打印二叉樹,同一行的節點從左到右的順序打印,每一層打印到新的一行。例如,打印下圖的二叉樹結果爲:
* 8,
* 6 10
* 5 7 9 11
* 輸入描述:無
* 程序輸出:按層打印的二叉樹爲:
* 1
* 2 3
* 4 5 6 7
* 8 9
*
* 問題分析: 無
* 算法描述:爲了把二叉樹的每一行單獨打印到一行裏,我們需要兩個變量:一個變量表示在當前層還沒有打印的節點數,另一個變量表示下一層的節點數目。
* 用一個隊列來保存將要打印的結點。爲了把二叉樹的每一行單獨打印到一行裏,
* 我們需要兩個變量:一個變量表示在當前的層中還沒有打印的結點數,另一個變量表示下一次結點的數目。
* 完成日期:2016-10-16
***************************************************************/
package org.marsguo.offerproject60;
import java.util.*;
class TreeNode{
int val;
public TreeNode left = null;
public TreeNode right = null;
public TreeNode(){
}
public TreeNode(int val){
this.val = val;
}
public String toString(){
return val + "";
}
}
class SolutionMethod1{
public void PrintFunction(TreeNode root){
if(root == null)
return ;
List<TreeNode> list = new LinkedList<>();
TreeNode node;
int current = 1; //當前層節點個數
int next = 0; //記錄的下一層節點個數
list.add(root); //把根節點放入root中
while(list.size() > 0){
node = list.remove(0); //從list中取出根節點,並打印輸出
current--;
System.out.printf("%-3d",node.val);
if(node.left != null){
list.add(node.left);
next++;
}
if(node.right != null){
list.add(node.right);
next++;
}
/*
* 當前層打印完畢,則將下一層的節點賦給current
*/
if(current == 0){
System.out.println();
current = next;
next = 0;
}
}
}
}
public class PrintBinaryTree {
public static void main(String[] args){
SolutionMethod1 solution1 = new SolutionMethod1();
TreeNode n1 = new TreeNode(1);
TreeNode n2 = new TreeNode(2);
TreeNode n3 = new TreeNode(3);
TreeNode n4 = new TreeNode(4);
TreeNode n5 = new TreeNode(5);
TreeNode n6 = new TreeNode(6);
TreeNode n7 = new TreeNode(7);
TreeNode n8 = new TreeNode(8);
TreeNode n9 = new TreeNode(9);
n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n3.right = n7;
n4.left = n8;
n4.right = n9;
System.out.println("按層打印的二叉樹爲:");
solution1.PrintFunction(n1);
}
}
劍指Offer面試題60:把二叉樹打印成多行 Java實現
題目:把二叉樹打印成多行
算法源程序:
從上到下按層打印二叉樹,同一行的節點從左到右的順序打印,每一層打印到新的一行。例如,打印下圖的二叉樹結果爲:
8,
6 10
5 7 9 11
算法分析:
爲了把二叉樹的每一行單獨打印到一行裏,我們需要兩個變量:一個變量表示在當前層還沒有打印的節點數,另一個變量表示下一層的節點數目。
用一個隊列來保存將要打印的結點。爲了把二叉樹的每一行單獨打印到一行裏,我們需要兩個變量:一個變量表示在當前的層中還沒有打印的結點數,另一個變量表示下一次結點的數目。
以下算法轉自博客:http://blog.csdn.net/derrantcm/article/details/46857911
程序運行結果:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.