二叉树路径查找,利用递归的方法查找,我的方法比较慢,因为需要先遍历到叶子节点再返回路径,如果在遍历的同时生成路径就会快很多。 更快的方法在第二段
方法一
/**
* Definition for a 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> totalPath;
stack<TreeNode*> tree;
vector<string> leftPath;
vector<string> rightPath;
if(!root) return totalPath;
if((!root->left) && (!root->right)){
totalPath.push_back(to_string(root->val));
return totalPath;
}
else {
if(root->left){
leftPath = binaryTreePaths(root->left);
}
if(root->right){
rightPath = binaryTreePaths(root->right);
}
}
if(!leftPath.empty()){
for(auto iter = leftPath.begin();iter < leftPath.end(); iter++){
totalPath.push_back(to_string(root->val) + "->" + *iter);
}
}
if(!rightPath.empty()){
for(auto iter = rightPath.begin();iter < rightPath.end(); iter++){
totalPath.push_back(to_string(root->val) + "->" + *iter);
}}
return totalPath;
}
};
方法二、
/**
* Definition for a 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> totalPath;
if(root == nullptr) return totalPath;
string curPath;
searchTree(root, totalPath, curPath);
return totalPath;
}
void searchTree(TreeNode* root, vector<string> &totalPath, string curPath){
if(root->left == nullptr && root->right == nullptr) {
curPath = curPath + to_string(root->val);
totalPath.push_back(curPath);
return;
}
curPath= curPath + to_string(root->val) +"->";
if(root->left!=nullptr) searchTree(root->left, totalPath, curPath);
if(root->right!=nullptr) searchTree(root->right, totalPath, curPath);
}
};