当前位置: 首页 > 知识库问答 >
问题:

使用 C 查找搜索二叉树中的最长路径

能钟展
2023-03-14

我很难找到使用递归函数查找搜索二叉树的最长路径的代码。

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"

感谢帮助。

共有2个答案

柳培
2023-03-14
#define max(a, b) a > b ? a : b
int maxDepth(bst_node *node) {
    if (node == NULL) {
        return 0;
    }
    int max_left = maxDepth(node->leftChild);
    int max_right = maxDepth(node->rightChild);
    return max(max_left, max_right) + 1;
}
纪辰沛
2023-03-14

诀窍是仔细考虑每个可能的情况。要么是基本情况,要么您需要将其分解为可以通过递归调用解决的较小问题。

int max(int a, int b) { return a > b ? a : b; }

int maxDepth(bst_node *node)
{
  // If the tree is empty, the depth is zero.
  if (!node) return 0;

  // Otherwise it's this node plus the max of the children.
  return 1 + max(maxDepth(node->leftChild), maxDepth(node->rightChild));
}
 类似资料:
  • 我正在学习C++语言,我正在尝试编写BST,但是出了问题。我尝试添加元素到空树,根是NULL,但添加元素后,根仍然是NULL,尽管添加成功了(我在调试模式下看到,节点设置为tmp)。我不知道为什么会这样。

  • 我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?

  • 我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。

  • 我试图编写一个Prolog谓词,为给定的遍历提供一个可能的二叉搜索树。我选择将树表示为,叶子就是,当子树不存在时,它的值是。 这是我到目前为止所做的(仅适用于本例中的后序遍历): 这在一个方面很好,但在另一个方面却很好: 我意识到不需要二叉搜索树,也就是说,不需要左子树中的所有节点都小于根节点,右子树中的所有节点都大于根节点,所以我还写了以下内容: 我想我可以做使Prolog只返回实际的二进制搜索

  • 本文向大家介绍用C ++程序查找二进制搜索树的最小值,包括了用C ++程序查找二进制搜索树的最小值的使用技巧和注意事项,需要的朋友参考一下 它是一个寻找二叉搜索树的最小值的程序。 演算法 示例 输出结果

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码: