博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer系列18:二叉树中和为某一值得路径
阅读量:4626 次
发布时间:2019-06-09

本文共 2109 字,大约阅读时间需要 7 分钟。

记录几个问题:首先,这道题目要打印出该路径,那么该路径如何存储?

树的结构只能从根结点向下走,而不能向父节点寻找。因此寻找出一条路径的时候,存储这个路径必须借助其他的数据结构,没有比vector更适合的了。

如何遍历整个树?

这是很经典的问题,这道题目要从根结点->左子树->右子树。这是很明显的前序遍历,用递归(树)。

1 #include
2 #include
3 using namespace std; 4 struct TreeNode { 5 int val; 6 struct TreeNode *left; 7 struct TreeNode *right; 8 }; 9 10 class Solution {11 public:12 vector
> re;//数据成员13 vector
> FindPath(TreeNode* root1, int expectNumber1) {14 if (root1 == NULL)15 return re;16 int count = 0;17 vector
temp;18 findit(root1,expectNumber1, temp, count);19 return re;20 }21 //在递归函数中不能建立新的变量,可以建立静态变量22 void findit(TreeNode* root, int expectNumber, vector
v2, int countsum)23 {24 countsum += root->val;25 v2.push_back(root->val);//v2用来存储当前vector26 bool isleaf = root->left == NULL&&root->right == NULL;27 if (countsum == expectNumber&&isleaf)28 {29 //输出这个vector30 for (int i = 0; i < v2.size(); i++)31 {32 cout << v2[i] << " ";33 }34 cout << endl;35 re.push_back(v2);36 }37 if (root->left != NULL)38 findit(root->left, expectNumber,v2, countsum);39 if (root->right != NULL)40 findit(root->right, expectNumber, v2, countsum);41 //v2.pop_back();//如果使用静态变量需要恢复现场42 }43 44 };45 46 47 int main()48 {49 // 0 1 2 3 450 // {10,5,12,4,7},2251 TreeNode TreeNode[5];52 TreeNode[0].val = 10;53 TreeNode[0].left = &TreeNode[1];54 TreeNode[0].right = &TreeNode[2];55 56 TreeNode[1].val = 5;57 TreeNode[1].left = &TreeNode[3];58 TreeNode[1].right = &TreeNode[4];59 60 TreeNode[2].val = 12;61 TreeNode[2].left = NULL;62 TreeNode[2].right = NULL;63 64 TreeNode[3].val = 4;65 TreeNode[3].left = NULL;66 TreeNode[3].right = NULL;67 68 TreeNode[4].val = 7;69 TreeNode[4].left = NULL;70 TreeNode[4].right = NULL;71 72 Solution solu;73 vector< vector
> res = solu.FindPath(&TreeNode[0], 22);74 cout << "size = " << res.size()<

树的遍历,很重要的问题,一定要会!各种遍历方法都要熟悉。

转载于:https://www.cnblogs.com/neverland0718/p/11043376.html

你可能感兴趣的文章
【模板】树状数组 1
查看>>
idea配置の隐藏参数
查看>>
BZOJ 1013: [JSOI2008]球形空间产生器sphere [高斯消元]
查看>>
用git上传项目到github
查看>>
Java try、catch、finally及finally执行顺序详解(转)
查看>>
安装 Python
查看>>
数据库设计原则
查看>>
洛谷P1595 信封问题
查看>>
Java反射的应用 --- 内省
查看>>
163邮箱报错: 535 Error: authentication failed
查看>>
HttpClient工具类
查看>>
nginx基础知识小结
查看>>
基本排序算法——基数排序java实现
查看>>
equals
查看>>
序列化 pickle(重点) shelve json(重点)
查看>>
PHP之Trait详解
查看>>
dubbo配置
查看>>
阅读笔记5
查看>>
POJ2029:Get Many Persimmon Trees(DP)
查看>>
使用 Entity Framework Core 时,通过代码自动 Migration
查看>>