问题是这样的,在一棵以root为根的树中,找出以root为起点的所有路径,要求路径中节点的值相加等于给定的数值。这个问题很简单,甚至于想都不用想就知道遍历树一遍就可以解决。
找出符合要求的路径,其实就是下面这个递归表达式:
1.求出以root为节点和等于v的路径;
2.如果root->value等于v,那么找到一条路径,返回;
3.如果root->value大于v,那么就分别找出以root左右孩子为根的和等于v – root->value的路径;
4.如果root->value小于v,那么就不存在符合条件的路径。
代码表示如下。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
struct tree {
int value;
struct tree *lchild;
struct tree *rchild;
};
struct tree *insert(struct tree *root, int value)
{
if (root) {
if (value < root->value) {
root->lchild = insert(root->lchild, value);
} else {
root->rchild = insert(root->rchild, value)