簡體   English   中英

打印二叉樹(逐層)Java

[英]Print a Binary Tree (level by level) Java

我正在嘗試制作一個class 逐級打印我的二叉樹

我的代碼類中有(1)在我的二叉樹上插入元素,(2)按順序打印,(3)按后序打印,(4)按預序打印。 我需要再創建一個 class 以樹狀結構(或金字塔狀)打印我的二叉樹 我想創建一個 class 來打印我的二叉樹的元素,如下所示:

在此處輸入圖像描述

謝謝!

public class MyBinaryTree { 
static class Node{
    char data;                      
    Node left;
    Node right;
    
    Node(char data){                
        left = right = null;        
        this.data = data;
    }
}

Node root;                  

MyBinaryTree(){
    root = null;                        
}                                       
public void insertElements() {
    Scanner scan = new Scanner(System.in);      
    String inputStr = new String();
    System.out.print("Input elements:");
    inputStr = scan.nextLine(); 

    for(int i = 0; i < inputStr.length(); i++) {    
        Insert(inputStr.charAt(i));                 
    }
}

public void Insert (char data) {                
    root = Insert(root, data);      
    numOfNodes++;                               
}                                                   
                                                    

Node Insert (Node node, char data) {
    if (node == null) {
        node = new Node(data);
    } else {
        if (data <= node.data) {                    
            node.left = Insert(node.left, data);    
        } else {
            node.right = Insert(node.right, data);  
        }                                           
    }
    return node;
    
}

}

如果要逐級打印,最好使用隊列

    void printLevelOrder() {
    Queue<Node> queue = new LinkedList<Node>();
    queue.add(root);
    queue.add(null);
    while (!queue.isEmpty()) {

        Node temp = queue.poll();
        if(temp!=null)
            System.out.print(temp.data + " ");

        if(temp == null) {
            System.out.println();
            if(queue.isEmpty()) break;
            queue.add(null);
            continue;
        }

        /*Enqueue left child */
        if (temp.left != null) {
            queue.add(temp.left);
        }

        /*Enqueue right child */
        if (temp.right != null) {
            queue.add(temp.right);
        }
    }
}

注意:將 null 添加到隊列中是指下一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM