Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
解题思路:先建立一个字符串str,类似于二叉树的中序遍历,先判断当前节点是否是叶子节点,如果是,在str尾部拼接上当前节点的值。如果不是,在str尾部拼接上"->"+"当前节点的值"(注意将int转化为string),如果左子树不为空的话,向左子树递归;如果右子树不为空,向右子树递归,递归的顺序可以改变,即可以先递归右子树,再递归左子树。
class Solution{
public:
vector<string> binaryTreePaths(TreeNode* root){
string str="";
vector<string> vec;
//如果是一棵空树,返回空的容器。
if(!root) return vec;
searchBinaryTreePaths(vec,str,root);
return vec;
}
//注意一定要加引用 & 符号
void searchBinaryTreePaths(vector<string> &vec,string str,TreeNode* root){
stringstream ss;
//叶子节点
if(!root->left&&!root->right)
{
ss<<root->val;//将int转化为string
str+=ss.str();
vec.push_back(str);
return ;
}
//非叶子节点
ss<<root->val;//将int转化为string
str+=ss.str()+"->";
//左子树不为空
if(root->left){
searchBinaryTreePaths(vec,str,root->left);
}
//右子树不为空
if(root->right){
searchBinaryTreePaths(vec,str,root->right);
}
}
};