在层序遍历的基础上维护一个队列用于存储从根节点开始的所有路径。路径queue的形成过程类似遍历queue的形成过程,以保证每个叶子节点连接在其父节点的路径后
//definition of binary tree node struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { vector<string> ans; if (root == nullptr) return ans; queue<TreeNode*> q1;//用于层序遍历 queue<string> q2;//用于存储路径 TreeNode* T = root; string cur = to_string(T->val); q1.push(T); q2.push(cur); while (!q1.empty()) { T = q1.front(); q1.pop(); if (T->left || T->right) { cur = q2.front(); if (T->left) { q1.push(T->left); q2.push(cur + "->" + to_string((T->left)->val)); } if (T->right) { q1.push(T->right); q2.push(cur + "->" + to_string((T->right)->val)); } q2.pop(); } else//叶子节点弹出 { ans.push_back(q2.front()); q2.pop(); } } return ans; } };