相关疑难解决方法(0)

C中的MIN和MAX

在C中的位置MINMAX定义,如果有的话?

实现这些的最佳方式是什么,尽可能通用和安全?(首选编译器扩展/内置主流编译器.)

c max min c-preprocessor

265
推荐指数
11
解决办法
67万
查看次数

返回递归三元怪胎

假设以下功能:

int binaryTree::findHeight(node *n) {
    if (n == NULL) {
        return 0;
    } else {
        return 1 + max(findHeight(n->left), findHeight(n->right));
    }
}
Run Code Online (Sandbox Code Playgroud)

treeHeight对于给定的二叉搜索树,相当标准的递归函数binaryTree.现在,我正在帮助一个朋友(他正在学习算法课程),我遇到了一个奇怪的问题,我无法100%向他解释这个功能.

将max定义为max(a,b) ((a)>(b)?(a):(b))(恰好是最大定义windef.h),递归函数变得怪异(它运行的n^n时间就像n树高一样).这显然使得检查具有3000个元素的树的高度非常非常长.

但是,如果max是通过模板定义的,就像std它一样,一切都很好.所以使用std::max修复他的问题.我只想知道原因.

另外,为什么countLeaves函数工作正常,使用相同的程序递归?

int binaryTree::countLeaves(node *n) {
    if (n == NULL) {
        return 0;
    } else if (n->left == NULL && n->right == NULL) {
        return 1;
    } else {
        return countLeaves(n->left) + countLeaves(n->right);
    }
}
Run Code Online (Sandbox Code Playgroud)

是因为在返回三元函数时,值a => …

c++ recursion binary-tree

5
推荐指数
1
解决办法
2965
查看次数

标签 统计

binary-tree ×1

c ×1

c++ ×1

c-preprocessor ×1

max ×1

min ×1

recursion ×1