/** * File: preorder_traversal_iii_compact.cpp * Created Time: 2023-04-16 * Author: Krahets (krahets@163.com) */ #include "../utils/common.hpp" vector path; vector> res; /* 前序遍历:例题三 */ void preOrder(TreeNode *root) { // 剪枝 if (root == nullptr || root->val == 3) { return; } // 尝试 path.push_back(root); if (root->val == 7) { // 记录解 res.push_back(path); } preOrder(root->left); preOrder(root->right); // 回退 path.pop_back(); } /* Driver Code */ int main() { TreeNode *root = vectorToTree(vector{1, 7, 3, 4, 5, 6, 7}); cout << "\n初始化二叉树" << endl; printTree(root); // 前序遍历 preOrder(root); cout << "\n输出所有根节点到节点 7 的路径,要求路径中不包含值为 3 的节点" << endl; for (vector &path : res) { vector vals; for (TreeNode *node : path) { vals.push_back(node->val); } printVector(vals); } }