使用二叉树的相关定义及函数在:二叉树最小结构(C++版本)
注意点:
找到的是从根节点到叶子节点的所有路径。
实现代码:
void PrintData(std::vector<int>& paths)
{
for (auto& curData : paths) std::cout << curData << " ";
std::cout << std::endl;
}
void FindPath(BinaryTreeNode* pRoot, std::vector<int>& paths)
{
if (nullptr == pRoot) return;
curData += pRoot->data;
paths.push_back(pRoot->data);
// 叶子节点打印路径
if (nullptr == pRoot->pLeft && nullptr == pRoot->pRight) PrintData(paths);
// 分别进入左子树和右子树
if (pRoot->pLeft != nullptr) FindPath(pRoot->pLeft, paths, curData, destData);
if (pRoot->pRight != nullptr) FindPath(pRoot->pRight, paths, curData, destData);
curData -= pRoot->data;
paths.pop_back();
}
void FindPath(BinaryTreeNode* pRoot, int destData)
{
if (nullptr == pRoot) return;
std::vector<int> paths;
FindPath(pRoot, paths, 0, destData);
}