二进制树(非搜索)最大函数
Binary Tree (not search) max function
我的代码出现了分段错误,我不知道为什么。我试图在一个没有排序的正则二叉树中找到最大值。
tnode<int> *maxT(tnode<int> *t)
{
if (t == NULL) return NULL;
tnode<int> *left = maxT(t->left);
tnode<int> *right = maxT(t->right);
if (left->nodeValue > right->nodeValue)
{
return maxT(left);
}
if (left->nodeValue < right->nodeValue)
{
return maxT(right);
}
}
算法的基本原理相当简单。由于树是无序的,所有节点都必须访问,前提条件如下:
- 一个null节点指针会导致null作为一个答案
- 否则,没有子节点的节点将导致当前节点
- 否则的结果是节点与其子节点的最大值相比的最大值
考虑到这一点,我很确定这就是你想要做的:
template<typename T>
tnode<T>* maxT(const tnode<T>* t)
{
if (!t)
return nullptr;
tnode<T>* lmax = maxT(t->left);
tnode<T>* rmax = maxT(t->right);
tnode<T>* cmax = (lmax && rmax)
? ((rmax->nodeValue < lmax->nodeValue ? lmax : rmax))
: (lmax ? lmax : rmax);
return (!cmax || (cmax->nodeValue < t->nodeValue) ? t : cmax);
}
tnode<int> *maxT(tnode<int> *t)
{
if (t->right == NULL && t->left == NULL) //leaf node
return t->nodeValue;
else if (t->right == NULL) //no right subtree
return MAX(t->nodeValue, maxT(t->left))
else if (t->left == NULL) //no left subtree
return MAX(t->nodeValue, maxT(t->right))
else
return MAX(maxT(t->right), maxT(t->left));
}
在您的情况下,如果一个节点没有右子节点或左子节点会发生什么。然后node->right==NULL或node->left==NULL。然而,您正在尝试访问左->节点值或右->节点值。
相关文章:
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 如何在动态数组上使用搜索函数
- C++二叉搜索树模板从函数返回节点
- 在对象数组中搜索字符串并返回相应值的函数
- 基于函数而不是集合的二分搜索或迭代器?
- 如何使用 binary_search STL 函数在嵌套类中搜索整数?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 二叉搜索树 - 实现"search"函数
- 如何计算函数的搜索复杂度
- 返回二叉搜索树特定级别的节点数的函数
- 为什么二叉搜索函数会抛出错误?
- 超过了三次函数根平分搜索时间限制
- 二进制搜索树没有匹配的函数调用
- 函数来搜索目录中的文件名
- 在C++目录中搜索文件的函数输出中出错
- 这是在传递 int num 时创建搜索函数的正确方法吗?使用链表库
- 如何在C ++代码中搜索所有构造函数?
- 尝试在别人的代码中C++创建函数(A* 搜索)
- 如何使用C++中的strrchr库函数搜索正斜杠
- 在函数搜索模式中引用二维数组时出错