gpt4 book ai didi

c - 关于 C 程序指针的问题

转载 作者:行者123 更新时间:2023-11-30 16:45:50 24 4
gpt4 key购买 nike

我编写的代码旨在执行二叉搜索树的中序遍历,并找到任意两个节点的值之间的最小绝对差。我编写了这段代码,当我运行这个测试用例时,它不是返回结果 1,而是抛出结果 2。

这是测试用例:

   2 
/ \
1 4

这是我编写的代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/

void inOrder(struct TreeNode* temp1, struct TreeNode* temp2, int* result) {
if (temp1->left != NULL) {
inOrder(temp1->left, temp2, result);
}
if (temp2 != NULL) {
int dif = temp1 -> val - temp2 -> val;
*result = *result > dif ? dif : *result;
}
printf("%p\n", temp2);
temp2 = temp1;
if (temp1->right != NULL) {
inOrder(temp1->right, temp2, result);
}
}

int getMinimumDifference(struct TreeNode* root) {
int result = 0x7fffffff;
struct TreeNode* temp = NULL;
inOrder(root, temp, &result);
return result;
}

这是 printf 的输出:

(nil)
(nil)
0xfe72b0

如您所见,只有最后一个节点不为空。这是异常的,因为根据代码的逻辑应该有两个非空打印。

你能帮我解决这个错误吗?

最佳答案

在您的代码中 temp2 始终为 NULL。
尝试下面的代码片段

void inOrder(struct TreeNode* temp1, struct TreeNode* temp2, int* result) {
if (temp1->left != NULL) {
inOrder(temp1->left, temp1, result);
}
if (temp2 != NULL) {
int dif = temp1 -> val - temp2 -> val;
if(dif < 0) dif *= -1; //absolute diff
*result = *result > dif ? dif : *result;
}
printf("%p\n", temp2);
//temp2 = temp1;
if (temp1->right != NULL) {
inOrder(temp1->right, temp1, result);
}
}

关于c - 关于 C 程序指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com