劍指Offer(Java版):從上往下打印二叉樹

題目:從上往下打印二叉樹的每一個結點,同一層的結點按照從左到右的順序打印。例如輸入下圖的二叉樹,則一次打印出8,6,10,5,7,9,11.java

這道題實質上考察的就是樹的遍歷算法,只是這種遍歷不是咱們熟悉的前序、中序或者後序遍歷。因爲咱們不太熟悉這種按層遍歷的方法,可能已下載也想不清楚遍歷的過程。node

由於按層打印的順序決定應該先打印的根節點,因此咱們從樹的根節點開 始分析。爲了接下來可以打印8的結點的兩個子節點,咱們應該在遍歷到該結點時把值爲6和10的兩個結點保存到一個容器中,如今容器內就有兩個結點了。按照 從左到右打印的要求,咱們先取出值爲6的結點。打印出6後把它的值分別爲5和7的兩個結點放入數據容器。此時數據容器中有三個結點,值分別爲 10,5,7.接下來咱們從數據容器中取出值爲10的結點。注意到值爲10的結點比值爲5,7,的結點先放入容器,此時又比這兩個結點先取出,這就是咱們 一般說的先入先出,所以不難看出這個容器應該是一個隊列。因爲值爲5,7,9,11的結點都沒有子節點,所以只要依次打印便可。算法

經過分析具體例子,咱們能夠找到從上到下打印二叉樹的規律:每一次打印一個結點的時候,若是該結點有子節點,把該結點的子節點放到一個隊列的尾。接下來到隊列的頭部取出最先進入隊列的結點,重複前面打印操做,直到隊列中全部的結點都被打印出爲止。.net

Java代碼實現:隊列

 

package cglib;get

import java.util.LinkedList;
import java.util.Queue;class

class BinaryTreeNode{
    
    int value;
    BinaryTreeNode leftNode;
    BinaryTreeNode rightNode;
    
}test


public class DeleteNode {
    public static void main(String args[])
    { BinaryTreeNode root1=new BinaryTreeNode();
    BinaryTreeNode node1=new BinaryTreeNode();
    BinaryTreeNode node2=new BinaryTreeNode();
    BinaryTreeNode node3=new BinaryTreeNode();
    BinaryTreeNode node4=new BinaryTreeNode();
    BinaryTreeNode node5=new BinaryTreeNode();
    BinaryTreeNode node6=new BinaryTreeNode();
    root1.leftNode=node1;
    root1.rightNode=node2;
    node1.leftNode=node3;
    node1.rightNode=node4;
    node4.leftNode=node5;
    node4.rightNode=node6;
    root1.value=8;
    node1.value=8;
    node2.value=7;
    node3.value=9;
    node4.value=2;
    node5.value=4;
    node6.value=7;
    DeleteNode test=new DeleteNode();
    test.printFromTopToBottom(root1);
    }
    
    public void printFromTopToBottom(BinaryTreeNode root){
        if(root==null)
        return;
        Queue<BinaryTreeNode> queue=new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
        BinaryTreeNode node=queue.poll();
        System.out.print(node.value);
        if(node.leftNode!=null){
        queue.add(node.leftNode);
        }
        if(node.rightNode!=null){
        queue.add(node.rightNode);
        }
        }
        }
}import

 

輸出:容器

8879247

相關文章
相關標籤/搜索