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"]
1.我的答案 (递归)
//
// main.cpp
// basic_tree
//
// Created by zjl on 16/5/5.
// Copyright © 2016年 zjl. All rights reserved.
//
#include <iostream>
#include <sstream>
#include <vector>
#include <queue>
#include <string>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//创建树
TreeNode* build_tree(vector<int> t,int num){
queue<TreeNode*> q;
TreeNode* root = new TreeNode(t[0]);
q.push(root);
int nums = 1;
while(nums < num){
TreeNode* temp = q.front();
q.pop();
if(nums <= num){
temp->left = new TreeNode(t[nums++]);
q.push(temp->left);
}
if(nums <= num){
temp->right = new TreeNode(t[nums++]);
q.push(temp->right);
}
}
return root;
}
//找到每条路径
void path(TreeNode* root, vector<string>& vs, string s){
int i = root->val;
stringstream ss;
ss<<i;
string t= ss.str() ;
s = s + t + "->";
if(root->left)
path(root->left, vs, s);
if(root->right)
path(root->right, vs, s);
if(root->left==NULL && root->right == NULL){
s.pop_back();
s.pop_back();
vs.push_back(s);
return;
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> vs;
string s;
if(!root)
return vs;
path(root,vs,s);
return vs;
}
void print_vec(vector<string> res){
for(int i= 0; i < res.size(); i++)
cout<<res[i]<<endl;
}
int main(int argc, const char * argv[]) {
vector<int>tree={1,2,3,4,5};
TreeNode* root = build_tree(tree,5);
vector<string>res = binaryTreePaths(root);
print_vec(res);
return 0;
}