打印二叉树(逐级)Java

时间:2021-05-21 19:30:01

标签: java binary-tree

我正在尝试制作一个类,逐级打印我的二叉树

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

enter image description here

谢谢!

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

}

1 个答案:

答案 0 :(得分:3)

如果您想逐级打印,最好使用队列

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

注意:向队列添加空值是在下一行提到的。

相关问题