繁体   English   中英

二进制搜索树递归显示功能,不确定如何工作?

[英]Binary search tree recursive display function, not sure how it works?

我有一个BST,并且我在网上找到了此功能,该功能以正确的顺序打印它,但是我不知道如何操作。

void display()
{
    inOrder(root);
}
void inOrder(treeNode* n)
{
   classA foo;
   if (n != NULL)
   {
        inOrder(n->left);
        foo = *n->item;
        cout << foo << endl << endl;
        inOrder(n->right);
    }
 }

我将每个节点的左右初始化为NULL。 为什么在发送NULL指针后继续执行if语句,它从何处继续?

假设您有以下BST:

在此处输入图片说明

inOrder被称为本BST,

递归级别0

n指向8 因此,您输入了块:

    inOrder(n->left);
    foo = *n->item;
    cout << foo << endl << endl;
    inOrder(n->right);

使用n->left作为参数(节点3 )调用inOrder

递归级别1

n指向3 因此,您输入相同的代码块。

使用n->left作为参数(节点1 )调用inOrder

递归级别2

n指向1 因此,您输入相同的代码块。

使用n->left作为参数调用inOrder ,即NULL

递归级别3

n指向NULL 因此,您无需输入上面的代码块。 您只需从函数中返回即可。 现在返回上一个递归级别的下一个语句。

递归级别2

执行以下行:

    foo = *n->item;
    cout << foo << endl << endl;
    inOrder(n->right);

您打印1 然后,使用n->right作为参数调用inOrder ,该参数为NULL

递归级别3

n指向NULL 因此,您无需输入上面的代码块。 您只需从函数中返回即可。 现在返回上一个递归级别的下一个语句。

递归级别2

没有更多要执行的行。 该函数仅返回到先前的递归级别。

递归级别1

执行以下行:

    foo = *n->item;
    cout << foo << endl << endl;
    inOrder(n->right);

您打印3 然后,使用n->right作为参数(节点6 )调用inOrder

现在,您可以逐步执行此步骤。 最终结果是您将最终按照以下顺序打印数字。

1
3
4
6
7
8
10
13
14

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM