问题描述:
给一棵二叉树,找出从根节点到叶子节点的所有路径。
样例
给出下面这棵二叉树:
1
/ \
2 3
\
5
所有根到叶子的路径为:
[
"1->2->5",
"1->3"
]
解题思路:
建立一个string类型的向量用以储存二叉树的所有路径,其中二叉树的根节点到每一个叶子节点的路径都表示为string类型的。路径的输出相当于前序遍历,当根节点的左子树不为空时继续访问,同时将左子树的值同根节点的值连接起来,形成一个新的s,直到遍历遇到叶子节点,及节点的左子树和右子树为空,这时将最终的s放入向量中。对于根节点的右子树做同样处理。
代码实现:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root the root of the binary tree
* @return all root-to-leaf paths
*/
vector<string>lz;
vector<string> binaryTreePaths(TreeNode* root) {
// Write your code here
if(root==NULL) return lz;
else func(root,to_string(root->val));
return lz;
}
void func(TreeNode* root,string l){
if(root->left==NULL&&root->right==NULL){
lz.push_back(l);
return;
}
string s;
if(root->left!=NULL){
s=l+"->";
s+=to_string(root->left->val);
func(root->left,s);
}
if(root->right!=NULL){
s=l+"->";
s+=to_string(root->right->val);
func(root->right,s);
}
}
};
解题感悟:
将二叉树中的数值连接起来形成string类型的数据是难点,to_string(int t)可以将整数型t转换为string类型,“+”可以实现两个string类型数据的无空格连接。另外要注意向量定义在函数体vector<string> binaryTreePaths(TreeNode* root)的外面,否则 函数func无法运行。