【问题标题】:Print a Binary Tree (level by level) Java打印二叉树(逐级)Java
【发布时间】:2021-05-21 19:30:01
【问题描述】:

我正在尝试创建一个逐级打印我的二叉树的类

我的代码类中有 (1) 在我的二叉树上插入元素,(2) 按顺序打印,(3) 按后序打印,(4) 按预序打印.我需要再创建一个类,以树状结构(或金字塔状)打印我的二叉树 我想创建一个类来打印我的二叉树的元素,如下所示:

谢谢!

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;
    
}

}

【问题讨论】:

  • 到目前为止你做了什么?我还没有看到任何印刷品...

标签: java binary-tree


【解决方案1】:

如果你想逐级打印,队列是最好的

    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 是指下一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多