寻找二叉树中和为固定值的从根节点到叶节点的所有路径

题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
  10 
  / /  
 5  12  
 / /  
4   7
则打印出两条路径:10, 12和10, 5, 7。

 

struct BinaryTreeNode { BinaryTreeNode(int d = -1): data(d), left(0), right(0) {} int data; BinaryTreeNode *left, *right; }; struct BinaryTree { BinaryTree(BinaryTreeNode *r = 0):root(r) {} void PrintAllPath(BinaryTreeNode *r, int sum); BinaryTreeNode *root; deque<int> path; }; void BinaryTree::PrintAllPath(BinaryTreeNode *r, int sum) { if(r) { if(r->left == NULL || r->right == NULL) { if(sum == r->data) { for(int i = 0; i < path.size(); ++i) cout << path.at(i) << " "; cout << r->data << endl; } } else { if(r->data > sum) return; path.push_back(r->data); PrintAllPath(r->left, sum - r->data); PrintAllPath(r->right, sum - r->data); path.pop_back(); } } }

你可能感兴趣的:(struct,null,Path)