求一棵二叉树中和为特定值的路径,可以用深搜的思路来解决,由于二叉树中各个节点的值没有特定的大小规律,所以没有可行的剪枝策略。具体的代码如下所示:
vector<TreeNode *> certainVal(TreeNode *root, int val, vector<TreeNode *> curNode, int curval){
//若找到路径则返回
if(val == curval){
return curNode;
}
//该路径已经搜索到叶子节点,且没有所找的路径
vector<TreeNode *> errResult;
if(root == nullptr){
return errResult;
}
//将root 节点加入到搜索路径中继续查找
curval += root -> val;
curNode.push_back(root);
vector<TreeNode *> result = certainVal(root -> left, val, curNode, curval); //搜索左子树
if(result.size() != 0){
return result;
}
vector<TreeNode *> result = certainVal(root -> left, val, curNode, curval); //搜索右子树
if(result.size() != 0){
return result;
}
//以根节点的左右子树为起始路径继续搜索
vector<TreeNode *> newStart;
result = certainVal(root -> left, val, newStart, 0); //搜索左子树
if(result.size() != 0){
return result;
}
result = certainVal(root -> right, val, newStart, 0); //搜索右子树
if(result.size() != 0){
return result;
}
return errResult; //在经过root节点的分支中没有找到,返回
}