打印二叉搜索树的所有叶节点
Print all leaf nodes of a Binary Search Tree
我试图按升序打印所有叶节点,但输出结果与我预期的不同。
插入函数:
Node *insert(Node **root, int k)
{
if(*root == NULL)
{
Node *newNode = (Node *)malloc(sizeof(Node ));
if(newNode == NULL)
return NULL;
newNode->key = k;
newNode->left = NULL;
newNode->right = NULL;
(*root) = newNode;
return newNode;
}
if(k < (*root)->key)
return insert(&((*root)->left),k);
else
return insert((&(*root)->right),k);
}
升序打印功能:
void printLeafs(Node *r)
{
if (r != NULL)
{
if(r->right == NULL && r->left == NULL)
printf("%d ", r->key);
printLeafs(r->right);
printLeafs(r->left);
}
}
示例:
输入:1 2 3 4 5 6 7 8 9
正确输出:4 7 8 9
我的输出:9
其他示例:
在这棵树中我的代码应该打印:
4 6 7 9 10
有什么想法吗?
因为
,你只留下了 pribnt 叶子
if(r->right == NULL && r->left == NULL)
对于非常特殊的输入 1 2 3 4 5 6 7 8 9
你只有一片叶子,即 9.
因此您的代码正在执行“打印二叉树的所有叶节点”,并在 leaf 节点上施加压力。
但是如果你想要 所有 个节点:
要解决此问题,您不应跳过 non-leaf 节点中的值,而是将其打印在正确的位置:
printLeafs(r->right);
printf("%d ", r->key);
printLeafs(r->left);
为了获得乐趣和洞察力,请对未更改的代码尝试不同的输入:
5 4 6 2 1 3 8 7 9
注意:我承认我忽略了所需的输出,因为它既不匹配“所有叶子”也不匹配“所有”。我的回答符合(回顾)假设你有一个 copy-paste 错误并且所需的输出是 1 2 3 4 5 6 7 8 9
.
我试图按升序打印所有叶节点,但输出结果与我预期的不同。
插入函数:
Node *insert(Node **root, int k)
{
if(*root == NULL)
{
Node *newNode = (Node *)malloc(sizeof(Node ));
if(newNode == NULL)
return NULL;
newNode->key = k;
newNode->left = NULL;
newNode->right = NULL;
(*root) = newNode;
return newNode;
}
if(k < (*root)->key)
return insert(&((*root)->left),k);
else
return insert((&(*root)->right),k);
}
升序打印功能:
void printLeafs(Node *r)
{
if (r != NULL)
{
if(r->right == NULL && r->left == NULL)
printf("%d ", r->key);
printLeafs(r->right);
printLeafs(r->left);
}
}
示例:
输入:1 2 3 4 5 6 7 8 9
正确输出:4 7 8 9
我的输出:9
其他示例:
在这棵树中我的代码应该打印:
4 6 7 9 10
有什么想法吗?
因为
,你只留下了 pribnt 叶子if(r->right == NULL && r->left == NULL)
对于非常特殊的输入 1 2 3 4 5 6 7 8 9
你只有一片叶子,即 9.
因此您的代码正在执行“打印二叉树的所有叶节点”,并在 leaf 节点上施加压力。
但是如果你想要 所有 个节点:
要解决此问题,您不应跳过 non-leaf 节点中的值,而是将其打印在正确的位置:
printLeafs(r->right);
printf("%d ", r->key);
printLeafs(r->left);
为了获得乐趣和洞察力,请对未更改的代码尝试不同的输入:
5 4 6 2 1 3 8 7 9
注意:我承认我忽略了所需的输出,因为它既不匹配“所有叶子”也不匹配“所有”。我的回答符合(回顾)假设你有一个 copy-paste 错误并且所需的输出是 1 2 3 4 5 6 7 8 9
.