二叉树的所有路径
题目
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]
示例 2:
输入:root = [1]
输出:["1"]
思路
递归法:确定好终止条件,也就是最后一步的时候,
if(cur->left==NULL&&cur->right==NULL){
str+=to_string(cur->val);
result.push_back(str);
return;
}
然后是单层的处理,每一层应该把该层的val变成string然后加到路径上去
str+=to_string(cur->val);
str+="->";
if(cur->left){
getstring(cur->left,str);
}
if(cur->right){
getstring(cur->right,str);
}
迭代法
特别注意这个pathst是用来干嘛的,记录着路径变化。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
//递归法
class Solution {
public:
vector<string> result;
void getstring(TreeNode* cur,string str){
if(cur->left==NULL&&cur->right==NULL){
str+=to_string(cur->val);
result.push_back(str);
return;
}
str+=to_string(cur->val);
str+="->";
if(cur->left){
getstring(cur->left,str);
}
if(cur->right){
getstring(cur->right,str);
}
}
vector<string> binaryTreePaths(TreeNode* root) {
string str;
getstring(root,str);
return result;
}
};
//迭代法
class Solution {
public:
vector<string> getstring(TreeNode* cur){
vector<string> result;
stack<string>pathst;
stack<TreeNode*> st;
if(cur==NULL){
return result;
}
st.push(cur);
pathst.push(to_string(cur->val));
while(!st.empty()){
TreeNode* top = st.top();st.pop();
string path = pathst.top();pathst.pop();
if(top->left==NULL&&top->right==NULL){
result.push_back(path);
}
if(top->right){
st.push(top->right);
pathst.push(path+"->"+to_string(top->right->val));
}
if(top->left){
st.push(top->left);
pathst.push(path+"->"+to_string(top->left->val));
}
}
return result;
}
vector<string> binaryTreePaths(TreeNode* root) {
return getstring(root);
}
};

浙公网安备 33010602011771号