Given a number. find all pairs of elements in a balanced bst,
which sum to this number. Make sure you don't return same pair again
我的想法是先序遍历每个节点,然后在每个节点处调用查找函数
但是这有问题,给定数8, 之前查到的节点是1,7; 后来查到的节点是7,1
像这类题目,需要避免重复,就要考虑到顺序。
用中序遍历树,这样就可以保证节点从小到大递增,在查找时要判断是否小于given number/2
struct NODE
{
int nVal;
NODE* pLft;
NODE* pRgt;
NODE(int n) : nVal(n), pLft(NULL), pRgt(NULL) {}
};
NODE* GetPair(int nSum, NODE* pRoot, NODE* pCur)
{
assert(pRoot != NULL && pCur != NULL);
if (nSum - pCur->nVal <= pCur->nVal) return NULL;
NODE* pRes = pRoot;
while (NULL != pRes)
{
if (pRes->nVal == nSum - pCur->nVal)
break;
if (pRes->nVal < nSum - pCur->nVal)
pRes = pRes->pRgt;
else
pRes = pRes->pLft;
}
return pRes;
}
void GetPairsToSum(int nSum, NODE* pRoot, NODE* pCur, vector<pair<NODE*, NODE*>>& vec)
{
if (NULL == pCur || NULL == pRoot) return;
GetPairsToSum(nSum, pRoot, pCur->pLft, vec);
NODE* pRes = GetPair(nSum, pRoot, pCur);
if (NULL != pRes)
vec.push_back(make_pair(pCur, pRes));
GetPairsToSum(nSum, pRoot, pCur->pRgt, vec);
}
平衡BST求和对查找
本文介绍了一种在平衡二叉搜索树(BST)中寻找元素对的方法,这些元素对的和等于给定数值。通过中序遍历确保节点递增顺序,并避免返回重复的元素对。
3370

被折叠的 条评论
为什么被折叠?



