程序员面试金典--面试24之二叉树和为某一值的路径
来源:互联网 发布:linux系统编辑文件 编辑:程序博客网 时间:2024/05/22 03:09
题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路:
- 递归先序遍历树, 把结点加入路径。
- 若该结点是叶子结点则比较当前路径和是否等于期待和。是的话打印从根节点到叶子节点的路径。
- 弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点
树的定义:
struct TreeNode{int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x):val(x),left(NULL),right(NULL) { }};
#include<iostream>using namespace std;#include<vector>struct TreeNode{int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x):val(x),left(NULL),right(NULL) { }};/*void Print(TreeNode *root,vector<int>&v,int &curNumber,int expectNumber){if(root == NULL)return ;curNumber += root->val;v.push_back(root->val);bool isLeaf = (root->left == NULL && root->right == NULL);if(curNumber == expectNumber && isLeaf){for(int i = 0; i < v.size(); ++i){cout << v[i] << " ";}cout <<endl;}if(root->left)Print(root->left,v,curNumber,expectNumber);if(root->right)Print(root->right,v,curNumber,expectNumber);curNumber -= root->val;v.pop_back();}void FindPath(TreeNode *root,int expectNumber){vector<int> v;int curNumber = 0;Print(root,v,curNumber,expectNumber);}*/void FindPath(TreeNode *root,int expectNumber,int &curNumber,vector<int> &v, vector<vector<int> > &ret){if(root == NULL)return ;curNumber += root->val;v.push_back(root->val);bool isLeaf = (root->left == NULL && root->right == NULL);if(curNumber == expectNumber && isLeaf){ret.push_back(v);}if(root->left)FindPath(root->left,expectNumber,curNumber,v,ret);if(root->right)FindPath(root->right,expectNumber,curNumber,v,ret);curNumber -= root->val;v.pop_back();}vector<vector<int> > FindPath(TreeNode *root,int expectNumber){vector< vector<int> > ret ;vector<int>v;int cursum = 0;FindPath(root,expectNumber,cursum,v,ret);return ret;}void test(){TreeNode *p1 = new TreeNode(10);TreeNode *p2 = new TreeNode(5);TreeNode *p3 = new TreeNode(12);TreeNode *p4 = new TreeNode(4);TreeNode *p5 = new TreeNode(7);p1->left = p2;p1->right = p3;p2->left = p4;p2->right = p5;vector<vector<int> > ret = FindPath(p1,22);for(int i = 0; i < ret.size(); ++i){for(int j = 0; j< ret[i].size(); ++j)cout << ret[i][j] << " ";cout <<endl;}}int main(){test();cout << "hello ...."<<endl;return 0;}
0 0
- 程序员面试金典--面试24之二叉树和为某一值的路径
- 程序员面试金典:最近公共祖先、二叉树中和为某一值的路径
- 程序员面试100题(算法)之二叉树中找出和为某一值的所有路径(含二叉树前序创建、遍历)
- 面试100题:4.在二叉树中找出和为某一值的所有路径
- 【从零单排之微软面试100题系列】04之二叉树中和为某一值的路径
- 微软面试100题系列---在二叉树中找出和为某一定值的所有路径
- 微软面试100题之一,之四 二叉查找树变双向链表 和为某一值的所有路径
- java之二叉树和为某一值的路径
- 面试经典(17)--二叉树中和为某一值的路径
- 面试算法(二十四)二叉树中和为某一值的路径
- 剑指offer-4-面试25:二叉树中和为某一值的路径
- 程序员面试100题---4.在二元树中找出和为某一值的所有路径(树)
- 微软面试之4 在二元树中找出和为某一值的所有路径(树)
- 面试100题:4.在二元树中找出和为某一值的所有路径
- 面试100题:4.在二元树中找出和为某一值的所有路径
- 面试100题004--二元树中找出和为某一值的所有路径
- 【剑指Offer面试编程题】题目1368:二叉树中和为某一值的路径--九度OJ
- 《程序员面试金典》--输出二叉树中某一层的所有元素
- 递归
- Oracle建表、索引、主键
- 带头结点与不带头结点的单链表-LinkList
- hihoCoder #1070 : RMQ问题再临(线段树)
- 剑指offer——反转链表
- 程序员面试金典--面试24之二叉树和为某一值的路径
- 笔试面试前突击用
- 经典稳定ssm框架模板搭建——第一节
- C++(4)/new delete & static & this指针 & 全局函数和成员函数
- LeetCode 349. Intersection of Two Arrays 350. Intersection of Two Arrays II set map使用 ****
- 百度面试题之查找最小的K个元素
- HTML相关知识---《基于R语言的自动数据收集》
- height、clientHeight、scrollHeight、offsetHeight区别
- 敌兵布阵 (线段树 单点更新)