簡體   English   中英

了解示例中按級別的 BFS 樹遍歷

[英]Understanding BFS tree traversal by levels on the sample

我正在學習如何按級別遍歷樹。 我做的方法應該采用樹編號的級別並打印回當前級別的節點。 我看過本教程- “在給定級別打印節點”,但仍然無法弄清楚遞歸在這個具體示例中是如何工作的。 所以,請幫助我理解。

// Java program for Inserting a node
class GFG1 {

    static class node {
        int key;
        node left, right;
    }

    static node newNode(int item)
    {
        node temp = new node();
        temp.key = item;
        temp.left = temp.right = null;
        return temp;
    }

    // Function to insert a new node
    static node insert(node node, int key)
    {
        // If the tree is empty, return a new node
        if (node == null)
            return newNode(key);

        // Otherwise, recur down the tree
        if (key < node.key) {
            node.left = insert(node.left, key);
        }
        else if (key > node.key) {
            node.right = insert(node.right, key);
        }
        return node;
    }

    static void printGivenLevel(node root, int level)
    {
        if (root == null)
            return;
        if (level == 1) {
            System.out.print(" " + root.key);
        }
        else if (level > 1) {
            printGivenLevel(root.left, level - 1);
            printGivenLevel(root.right, level - 1);
        }
    }

    public static void main(String[] args)
    {
        node root = null;
        root = insert(root, 50);insert(root, 30);insert(root, 20);insert(root, 40);insert(root, 70);insert(root, 60);insert(root, 80);
        printGivenLevel(root,2);

    }
}

層級遍歷的方法是printGivenLevel
那么,為什么它需要在printGivenLevel(root.left, level - 1)中寫入level-1而不適用於“level +1”? 我們如何達到基本條件,例如在第 3 層或第 2 層?

樹長得像

   50
  30 70
20 40 60 80 

level在這里是一個含糊不清的術語,在printGivenLevel中,它從最頂層的“level”開始,從技術上講是level 1 ,我們向下遞歸直到達到我們想要的“level”。

    Actual level       "level" inside printGivenLevel(root, level)    
        1          50              3
        2        30   70           2
        3      20 40 60 80         1

讓我們看看printGivenLevel(root, 2)是如何執行的,將printGivenLevel重命名為print

 1. print(root, 2) -> print(root.left(30), 1) and print(root.right(70), 1)
 2. print(root(30), 1) -> we are at "level 1", print the value 30.
 3. print(root(70), 1) -> we are at "level 1", print the value 70.

當“level”變為等於 1 時,基本條件總是達到,我們從頂層開始向下計數,當達到我們想要的級別時,“level”計數變為 1,我們打印節點的值。

那么,為什么它需要在 printGivenLevel(root.left, level - 1) 中寫入 level-1 而不適用於“level +1”? 我們如何達到基本條件,例如在第 3 層或第 2 層?

如果level總是增加,它會繼續增加並且不會達到 level 1,不會打印任何值並且會導致 stackoverflow。

暫無
暫無

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

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