我很难找到使用递归函数查找搜索二叉树的最长路径的代码。
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"
感谢帮助。
#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;
}
诀窍是仔细考虑每个可能的情况。要么是基本情况,要么您需要将其分解为可以通过递归调用解决的较小问题。
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 ++程序查找二进制搜索树的最小值的使用技巧和注意事项,需要的朋友参考一下 它是一个寻找二叉搜索树的最小值的程序。 演算法 示例 输出结果
我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码: