我编写了以下函数,用于查找二叉搜索树中任意路径的最小和:
int minSumPath(TreeNode* root) {
if(root==NULL)
return 0;
int sum = root->value;
if(root->left!=NULL && root->right!=NULL)
sum += min(minSumPath(root->left),minSumPath(root->right));
else
if(root->left==NULL)
sum += minSumPath(root->right);
else
sum += minSumPath(root->left);
return sum;
}
虽然上面的代码可以生成正确的输出,但我感觉没有充分利用它是二叉搜索树(BST)而不仅仅是二叉树这个事实。
在一个 BST 中,左子节点小于根节点和右节点,因此我们只能考虑每个根节点的左子节点;但是如果 BST 只有一个右侧的子节点(例如值为 10),而左侧有多个子节点(总和大于10),该怎么办呢?
在这种情况下,最小和将为 10(在右侧)。
我是否能够充分利用 BST 属性?还有其他优化方法吗?
注意:已编辑代码以解决错误;
root
是否为NULL
,因此您可以省略其他级别的空值检查,并仅使用在left
或right
中的NULL
调用minSumPath
。 - Nobody moving away from SEroot->left
和root->right
将成为新的root
,再次检查是否为NULL
。 - Nobody moving away from SE