题目:给定一个二叉树要求打印出所有从根结点到叶子结点路径和为value的路径
例如,给定二叉树如下要求打印出所有和为9的路径,有1->6->3->-1和1->7->4->-3
分析:
1. 要找到所有的路径,利用前序遍历即可做到,我们维护一个数组保存路径上面的点,同时维护一个sum,当到达叶子结点的时候判断是否相等即可
2. 代码
//二叉树结点 struct BinaryTreeNode{ int value; BinaryTreeNode *lson; BinaryTreeNode *rson; }; //打印路径 void Print(int *path, int n){ for(int i = 0; i < n; i++){ cout<<path[i]<<" "; } cout<<endl; } //打印和为k的所有路径 void PrintPath(BinaryTreeNode *root, int *path, int pos, int sum, int k){ //不合法数据 if(path == NULL){ return; } //到底叶子结点 if(root == NULL){ //和为value就打印 if(sum == k){ Print(path, pos); } } path[pos] = root->value; PrintPath(root->lson, path, pos+1, sum+root->value, k); PrintPath(root->rson, path, pos+1, sum+root->value, k); }