1、题目
给一棵二叉树,找出从根节点到叶子节点的所有路径
给出下面这棵二叉树:
1
/ \
2 3
\
5
所有根到叶子的路径为:
[
"1->2->5",
"1->3"
]
2、思路
先写了一个函数,该函数是在根节点不空时,开始寻找所有路径。当左右子树全空时,返回根节点的值;当左子树不空时,递归,开始在左子树上寻找所有路径;当右子树不空时,递归,开始在右子树上寻找所有路径;
注意:
①&path 传引用,相当于全局变量,在左子树找完所有路径后,右子树的路径会继续累加在path上;应该用 path,传值方式,相当于局部变量,这样在左子树找完路径后,右子树的path不包含左子树的。
②path+"->"+to_string(rootnode->left->val)
int类型强制转换成string类型。
string类型的字符如何串成一串,用相加。
3、代码
/**
* 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> v;
void FindAllPath(TreeNode *rootnode,string path) //根节点非空时找所有路径
{
if(rootnode->left==NULL && rootnode->right==NULL)
v.push_back(path);
if(rootnode->left!=NULL)
FindAllPath(rootnode->left,path+"->"+to_string(rootnode->left->val));
//将int型 的val转换成string,构成字符串用+
if(rootnode->right!=NULL)
FindAllPath(rootnode->right,path+"->"+to_string(rootnode->right->val));
}
vector<string> binaryTreePaths(TreeNode* root) {
// Write your code here
if(root==NULL)
return v;
else{
FindAllPath(root,to_string(root->val));
return v;
}
}
};
4、感想
一开始不懂怎么把int类型的转换成string类型的,借鉴了网上的一些做法才写出来了。
每条路径当到达叶子结点时结束,充分体现了传值和传引用的区别!!!!