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