标签:
题目:
请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径。 规则如下: 2、从根节点遍历树时,请请按照左到右遍历,即优先访问左子树的节点。
输入"10,5,12,4,7"值,构造的树如下: 1) 10
针对上面的二叉树,如果当前我们设置的“路径和”为19,那么输出结果为: 10,5,4 如果有多个路径,按到左到右的顺序遍历生成的结果每行显示一个显示。例如如果当前我们设置的“路径和”为22,那么输出结果为: 10,5,7 10,12 如果没有找到路径和为设置的值的路径,输出error。
|
|
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: |
输入整数N---路径和 一行字符串,多个正整数,之间用","隔开 |
输出: |
满足条件的二叉树路径 |
样例输入: |
22 10,5,12,4,7 |
样例输出: |
10,5,7 10,12 |
代码:
1 #include <iostream> 2 #include <sstream> 3 #include <vector> 4 #include <stdlib.h> 5 6 using namespace std; 7 8 struct TreeNode 9 { 10 int val; 11 TreeNode *left, *right; 12 TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 13 }; 14 15 void creatTree(TreeNode *&root, vector<int>& a, int i, int len) 16 { 17 if (i >= len) 18 return; 19 root = new TreeNode(a[i]); 20 creatTree(root->left, a, 2 * i + 1, len); 21 creatTree(root->right,a, 2 * i + 2, len); 22 } 23 24 void inorderTraversal(TreeNode* root) 25 { 26 if (root) 27 { 28 cout << root->val << " "; 29 inorderTraversal(root->left); 30 inorderTraversal(root->right); 31 } 32 } 33 34 vector<int> vec; 35 int sum = 0; 36 bool isCoutBlank = false; 37 bool isFind = false; 38 void pathTree(TreeNode*& root, int target) 39 { 40 sum += root->val; 41 vec.push_back(root->val); 42 if (sum == target && !root->left && !root->right) 43 { 44 isFind = true; 45 if(isCoutBlank) 46 cout << endl; 47 isCoutBlank = true; 48 for (int i = 0; i < vec.size() - 1; ++i) 49 { 50 cout << vec[i]<< ","; 51 } 52 cout << vec[vec.size() - 1]; 53 } 54 if (root->left) 55 pathTree(root->left, target); 56 if (root->right) 57 pathTree(root->right, target); 58 sum -= root->val; 59 vec.pop_back(); 60 } 61 62 63 int main() 64 { 65 TreeNode* root = nullptr; 66 int target; 67 cin >> target; 68 string val; 69 cin >> val; 70 string temp; 71 stringstream ss(val); 72 int node; 73 vector<int> nodes; 74 while (!ss.eof()) 75 { 76 getline(ss, temp, ‘,‘); 77 stringstream stmp; 78 stmp << temp; 79 stmp >> node; 80 nodes.push_back(node); 81 } 82 creatTree(root, nodes, 0, nodes.size()); 83 pathTree(root,target); 84 if (!isFind) 85 cout << "error"; 86 }
标签:
原文地址:http://www.cnblogs.com/zhangbaochong/p/5777498.html