#include #include #include #include using namespace std; vector> result; template struct Node { T element; Node* left; Node* right; Node* parent; Node(const T& e, Node* p) : element(e), parent(p), left(nullptr), right(nullptr) {} }; template class BinTree { public: Node* root; int height; vector arr; BinTree() : root(nullptr), height(0) {} BinTree(const vector& arrs) : arr(arrs), height(0) {} void test() { for (auto x : arr) { cout << x << " "; } } Node* returnroot() { return this->root; } Node* build(int& index, Node* parent) { if (index >= arr.size() || arr[index] == 0) { index++; return nullptr; } Node* node = new Node(arr[index], parent); index++; node->left = build(index, node); node->right = build(index, node); return node; } void buildTree() { int index = 0; this->root = build(index, nullptr); } //输出 void preorder(Node* node) { if (node == nullptr) return; cout << node->element << " "; preorder(node->left); preorder(node->right); } void inorder(Node* node) { if (node == nullptr) return; inorder(node->left); cout << node->element << " "; //cout << ( node->parent == nullptr ? 0 : node->parent->element) << endl; inorder(node->right); } void postorder(Node* node) { if (node == nullptr) return; postorder(node->left); postorder(node->right); cout << node->element << " "; } Node* inorder2(Node* node, const T& x) { if (node == nullptr) return nullptr; if (node->element == x) { return node; } Node* leftResult = inorder2(node->left, x); if (leftResult != nullptr) { return leftResult; } Node* rightResult = inorder2(node->right, x); return rightResult; } void findparent(const T& e) { auto x = inorder2(this->root, e); if (x == nullptr || x->parent == nullptr) cout << 0 << endl; else cout << x->parent->element << endl; } void deletesub(Node* node) { if (node == nullptr) return; deletesub(node->left); deletesub(node->right); delete node; } bool deletenode(const T& e) { auto x = inorder2(this->root, e); if (x == nullptr) return false; if (x == this->root) { deletesub(x); this->root = nullptr; return true; } if (x->parent->left == x) { x->parent->left = nullptr; } else { x->parent->right = nullptr; } deletesub(x); return true; } }; template void add(vector& path, Node* n, int sum, int target) { if (n == nullptr) return; sum += n->element; path.push_back(n->element); if (n->left == nullptr && n->right == nullptr && sum == target) { result.push_back(path); } add(path, n->left, sum, target); add(path, n->right, sum, target); path.pop_back(); } int main() { int x = 0; vector arr; string line; getline(cin, line); stringstream ss(line); int num; while (ss >> num) { arr.push_back(num); } BinTree tree(arr); tree.buildTree(); int m; cin >> m;//和 vector path; add(path, tree.root, 0, m); if(result.size() == 0) cout << 0 << endl; else{ cout << result.size() << endl; for(auto x: result){ for(auto y: x){ cout << y << " "; } cout << endl; } } return 0; }