从c中的二叉树中获取最小的三个数
Get smallest three numbers from binary tree in c
我使用 inorder 函数从最小到最大的元素打印二叉搜索树中的数据。我如何才能只打印前三个最小元素?
void inorder(struct node *root)
{
// Depth-first
// Inorder (LDR) --> <left> <data> <right>
if(root == NULL)
return;
indorder(root -> left_child);
printf("%d ", root -> value);
inorder(root -> right_child);
}
我想为前 n 个元素添加新参数
void inorder(struct node *root, int n)
让你的函数 return 成为 n
的新值,这样在递归调用后你可以看到 n
是否仍然是正值,并且应该打印当前节点的值。如果没有,那么你可以退出递归树,因为没有什么可做的了:
int inorder(node *root, int n) {
if (root == NULL || n <= 0) // Nothing to print here.
return n;
n = inorder(root -> left_child, n);
if (n <= 0) // All required prints have been done, so exit recursion tree
return 0;
printf("%d ", root -> value);
// Previous print counts as 1, so pass one less to next call:
return inorder(root -> right_child, n-1);
}
我使用 inorder 函数从最小到最大的元素打印二叉搜索树中的数据。我如何才能只打印前三个最小元素?
void inorder(struct node *root)
{
// Depth-first
// Inorder (LDR) --> <left> <data> <right>
if(root == NULL)
return;
indorder(root -> left_child);
printf("%d ", root -> value);
inorder(root -> right_child);
}
我想为前 n 个元素添加新参数
void inorder(struct node *root, int n)
让你的函数 return 成为 n
的新值,这样在递归调用后你可以看到 n
是否仍然是正值,并且应该打印当前节点的值。如果没有,那么你可以退出递归树,因为没有什么可做的了:
int inorder(node *root, int n) {
if (root == NULL || n <= 0) // Nothing to print here.
return n;
n = inorder(root -> left_child, n);
if (n <= 0) // All required prints have been done, so exit recursion tree
return 0;
printf("%d ", root -> value);
// Previous print counts as 1, so pass one less to next call:
return inorder(root -> right_child, n-1);
}