[英]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.