我知道如何使用堆栈和顺序遍历找到树的最大深度,但我无法弄清楚如何使用堆栈或队列而不是递归调用来查找树的最小深度(不一定是BST)
答案 0 :(得分:3)
这里需要注意的一点是,当您执行递归时,您正在使用流程执行堆栈。这通常具有OS设置的一些限制。因此,每次递归时,进程状态都会被推送到此堆栈。所以在某些时候发生了stackoverflow。
如果您最终做的迭代版本与递归相关,请注意这里的区别在于此堆栈实现由您维护。还有很多工作要做,但是避免了stackoverflow ...
我们可以做类似以下的事情(递归版) -
<强> MIN-VALUE 强>
int min = INT_MAX;
void getMin(struct node* node)
{
if (node == NULL)
return;
if(node->data < min)
min = node->data;
getMin(node->left);
getMin(node->right);
return min;
}
或者你可以使用min-heap,它可以在恒定时间内为你提供最小值。
更新:因为您将问题更改为最小深度
<强> MIN-深度强>
#define min(a, b) (a) < (b) ? (a) : (b)
typedef struct Node
{
int data;
struct Node *left, *right;
}Node;
typedef Node * Tree;
int mindepth(Tree t)
{
if(t == NULL || t->left == NULL || t->right == NULL)
return 0;
return min( 1 + mindepth(t->left), 1 + mindepth(t->right) );
}
PS:代码是徒手打字的,可能存在语法错误,但我相信逻辑很好......