簡體   English   中英

如何打印包括 null 值的二叉樹的級別順序遍歷? java

[英]how to print level order traversal of binary tree including null values? java

嘿伙計們,我正在嘗試打印二叉樹的級別順序遍歷,但我無法打印 null 值(在下面的代碼中顯示為連字符“-”)。 你能幫我解決這個問題嗎? 到目前為止,這是我的代碼:

static void printIt(Node root) {
    int h = findHeight(root);
    int i;
    for (i = 1; i <= h; i++)
        writeLevelOrder(root, i);
}


static int findHeight(Node node) {
    if (node == null) {
        return 0;
    }
    return 1 + Math.max(findHeight(node.right), findHeight(node.left));
}

static void writeLevelOrder(Node root, int level) {

    if (root==null) {
        System.out.print("- ");
        return;
    }

    if (level==1){
        System.out.print(root.val + " ");
    }
    else if (level > 1) {
        if (root.left == null) {
            System.out.print("- ");
        }
        if (root.right == null) {
            System.out.print("- ");
        }
        writeLevelOrder(root.left, level - 1);
        writeLevelOrder(root.right, level - 1);
    }
}

這不是一個有效的解決方案,但它可以完成工作。我只是用 28282828 填充 null 值並在打印時檢查它,這是我的解決方案:

static void printIt(Node root, BufferedWriter writer) throws IOException {
    int h = findHeight(root);
    int i;
    for (i = 1; i <= h; i++)
        writeLevelOrder(root, i, writer);
}


static int findHeight(Node node) {

    if (node == null) {
        return 0;
    }
    return 1 + Math.max(findHeight(node.right), findHeight(node.left));
}


static void writeLevelOrder(Node root, int level, BufferedWriter writer) throws IOException {


    if (root == null && level == 1) {
        System.out.print("- ");
        writer.write("- ");
        return;
    }
    if (root == null && level != 1) {
        Node r = new Node(28282828);
        root = r;
        root.left = r;
        root.right = r;
        System.out.print("- ");
        writer.write("- ");
    }
    if (root.val == 28282828 && level != 1) {
        System.out.print("- ");
        writer.write("- ");
    }
    if (level == 1 && root.val != 28282828) {
        System.out.print(root.val + " ");
        writer.write(root.val + " ");
    } else if (level > 1) {
        writeLevelOrder(root.left, level - 1, writer);
        writeLevelOrder(root.right, level - 1, writer);

    }

}

暫無
暫無

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

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