【算法题】打印二元查找树中元素和等于指定数的所有路径
来源:互联网 发布:ip地址显示在阿里云 编辑:程序博客网 时间:2024/05/16 10:34
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如:输入整数24和如下二元树
10
/ \
6 14
/ \
4 8
则打印出两条路径:10, 14 和10, 6, 8。
- #include <iostream>
- using namespace std;
- #define MAX_LEN 20
- typedef struct Node
- {
- Node() : v(0), left(NULL), right(NULL) {}
- Node(int _v, Node *l=NULL, Node *r=NULL) : v(_v), left(l), right(r) {}
- int v;
- Node *left;
- Node *right;
- }sNode;
- //LB_c: 利用递归和回溯方法,注意参数arr是数组的引用(每次递归用的是同一个数组,不会多次分配)
- void checkSum(sNode *cur, int sum, int (&arr)[MAX_LEN], int idx)
- {
- sum -= cur->v;
- arr[idx++] = cur->v;
- //LB_c: 左右孩子都是NULL,即cur为叶子节点
- if ( (NULL == cur->left) && (NULL == cur->right) )
- {
- //LB_c: 如果当前要查找的节点和为0,则到当前节点的路径就是要着的路径,arr中记录了该路径中个节点的值
- if (0 == sum)
- {
- for (int i=0; i<idx; i++)
- {
- cout << arr[i] << " ";
- }
- cout << endl;
- }
- return;
- }
- else
- {
- checkSum(cur->left, sum, arr, idx);
- checkSum(cur->right, sum, arr, idx);
- }
- //LB_c: 这里很关键,当前节点的子树已经遍历完,这里需要“恢复”到遍历前进行回溯!
- sum += cur->v;
- --idx;
- }
- int main()
- {
- //create BST
- sNode n1(4);
- sNode n2(8);
- sNode n3(6, &n1, &n2);
- sNode n4(14);
- sNode root(10, &n3, &n4);
- //call checkSum()
- int res[MAX_LEN];
- checkSum(&root, 24, res, 0);
- return 0;
- }
- 【算法题】打印二元查找树中元素和等于指定数的所有路径
- 【算法题】打印二元查找树中元素和等于指定数的所有路径
- 二元查找树-- 在二元树中找到和为某一值的所有路径
- 算法题23 在二元树中找出和为某一值的所有路径
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 打印二元树所有路径
- java实现 数组中两个元素相加等于指定数的所有组合
- 在二元树中找出和为某一值的所有路径-递归算法
- 算法讨论(三)---在二元树中找出和为某一值的所有路径
- 【算法】在二元树中找出和为某一值的所有路径
- 算法习题5:在二元树中找出和为某一值的所有路径
- 微软算法100道题------在二元树中找出和为某一值的所有路径
- 每天一道算法题(9)——在二元树中找出和为某一值的所有路径
- 每日一道算法题4——在二元树中找出和为某一值的所有路径
- 算法面试100题——4.在二元树中找出和为某一值的所有路径
- 输入一个整数和一棵二元树,打印出所有和为该整数的二元树中的路径
- 打印结点和等于某个值的所有路径
- 对象复制与单例
- 路径下文件遍历
- 最小堆(小根堆)
- Android手机分辨率基础知识(DPI,DIP计算)
- 进程切换时机
- 【算法题】打印二元查找树中元素和等于指定数的所有路径
- 一个C语言程序说明了实参到形参的传递过程(2)
- 坑爹的 wyArray
- HttpServletResponse应用
- 什么是汉明窗?加Hanmming窗的作用?
- java面试题经典20例【第二季_常瑞鹏】
- [转载]Android - 文件读写操作
- 《为了看看阳光,我来到这世上》
- leetcode - Palindrome Partitioning II