【发布时间】:2022-01-16 01:24:40
【问题描述】:
我无法找到使用递归函数查找搜索二叉树最长路径的代码。
void maxDepth(bst_node *node)
{ ....
}
bst_node 是搜索二叉树的一个节点。
退出递归的条件很简单:
if(node->leftChild==NULL&&node->rightChild==NULL)
{
return;
}
在进行递归之前打印节点的值:
printf("%d ",node->value);
如果假设深度 x 的节点只有一个左孩子,那么最长的路径会通过该节点的左孩子,通过使用递归我们可以这样写:
if(node->rightChld==NULL)
{
maxDepth(node->leftChild);
}
如果深度 x 的节点只有一个右孩子,那么最长的路径会通过该节点的右孩子,通过使用递归我们可以这样写
if(node->leftChild==NULL)
{
maxDepth(node->rightChild);
}
但是如果节点同时具有左右孩子怎么办?我不明白我该怎么做。
例如,对于这个二叉搜索树,输出应该是:
“11 13 57 25 17”
帮助表示赞赏。
【问题讨论】:
-
两者都做,看看哪个更好。
-
如何查看哪个更好?
-
maxDepth函数需要将其发现报告给调用者。这通常通过返回深度来完成。也就是说,函数是int maxDepth(bst_node *node) -
为什么你的函数是
void函数?调用该函数的假定效果是什么?你能给出函数应该给出的示例输入和相应的输出,以及它应该如何给出? (不是返回值??) -
我已经更新了问题。
标签: c recursion binary-search-tree