題目:輸入一個整數和一顆二叉樹。從樹結點到葉結點經過的結點定義爲一條路徑。找出路徑上所有結點和爲該整數的路徑並打印出來。
定義二叉樹結點爲下:
struct BinaryTreeNode{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
思路:
1.典型遞歸。
2.設當前結點是p,用整數減去p->value,得到一個值。 如果p是葉結點。並且值爲0,那麼該路徑是存在的。因爲子結點無法指向父結點,我們需要一個結構來保存從上到下經過的結點。
代碼如下:
struct BinaryTreeNode{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
void FindPath(BinaryTreeNode* root,int value,vector<int> &vec){
if (root==NULL)
{
return;
}
vec.push_back(root->value);
bool isLeaf = (root->left==NULL)&&(root->right==NULL);
bool isPath = (value==root->value);
if (isLeaf&&isPath)
{
/*
打印整個路徑
*/
std::vector<int>::iterator it = vec.begin();
for (;it!=vec.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
else if (!isLeaf)
{
int remainValue = value - root->value;
FindPath(root->left,remainValue,vec);
FindPath(root->right,remainValue,vec);
}
vec.pop_back();
}