IT公司100题-4-在二元树中找出和为某一值的所有路径
2019独角兽企业重金招聘Python工程师标准>>>
问题描述:
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数30和如下二元树
14
/ \
5 16
/ \
3 11
则打印出两条路径:14, 16 和14, 5, 11。
二元树节点的数据结构定义为:
class BSTreeNode{BSTreeNode(int x, BSTreeNode lt, BSTreeNode rt){value = x;left = lt;right = rt;}int value;BSTreeNode left;BSTreeNode right;}
在遍历树的过程中,使用stack保存所走过的路径。如果当前节点为叶子节点,并且路径和等于输入的整数,则输出路径。如果当前节点不是叶子节点,则递归的访问它的孩子节点。在回溯的过程中,注意路径的出栈。
代码实现:
package oschina.mianshi;
/*** @project: oschina* @filename: IT3.java* @version: 0.10* @author: JM Han* @date: 14:59 2015/10/22* @comment: Test Purpose* @result:*/import java.util.Stack;import static tool.util.*;class BSTree3{class BSTreeNode{BSTreeNode(int x, BSTreeNode lt, BSTreeNode rt){value = x;left = lt;right = rt;}int value;BSTreeNode left;BSTreeNode right;}private BSTreeNode root;private int currentSum;private Stack<Integer> path;public BSTree3(){root = null;currentSum = 0;path = new Stack<Integer>();}public void insert(int value){root = insert(root, value);}private BSTreeNode insert(BSTreeNode t, int x){if(null == t)return new BSTreeNode(x, null, null);if(t.value > x)t.left = insert(t.left, x);else if(t.value < x)t.right = insert(t.right, x);else;//duplicatereturn t;}public void findPath(int expectSum){findPath(root, expectSum);}private void findPath(BSTreeNode t, int expectSum){if(null == t)return;currentSum += t.value;path.push(t.value);boolean isLeaf = (t.left == null && t.right == null);if(isLeaf && currentSum == expectSum){printGenericColection(path);}if(null != t.left)findPath(t.left, expectSum);if(null != t.right)findPath(t.right, expectSum);currentSum -= t.value;path.pop();}
}public class IT3 {public static void main(String[] args) {BSTree3 bsTree = new BSTree3();bsTree.insert(14);bsTree.insert(5);bsTree.insert(16);bsTree.insert(3);bsTree.insert(11);bsTree.findPath(30);}
}
代码输出:
14
5
11
14
16
转载于:https://my.oschina.net/jimmyhan/blog/520689
IT公司100题-4-在二元树中找出和为某一值的所有路径相关推荐
- 微软面试题系列(四):在二元树中找出和为某一值的所有路径
有了第一题作为基础,这一题写起来也相当简单.只是搜索的时候呢,可以剪枝一下.这个是搜索的技巧,用多了就自然有这个习惯了! 建树依然建立二元查找树,然后用深搜,用一个path数组把结点的值存储起来.用深 ...
- 在二元树中找出和为某一值的所有路径
具体实现代码如下: BSTree.h具体内容: #ifndef _BSTREE_H_ #define _BSTREE_H_ typedef struct _tagBSTreeNode {int m_n ...
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
题目:输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等的所有路径. 例如输入整数22和如下二元树 10 ...
- Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件
题目为: 有一百个图片文件,它们的地址都是 http://down.fengge.com/img/1.png http://down.fengge.com/img/2.png - 一直到http:// ...
- 【华为OD机试模拟题】用 C++ 实现 - 找出同班小朋友(2023.Q1)
最近更新的博客 [华为OD机试模拟题]用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客 使用说明 找出同班小朋友 题目 输入 输出 示例一 输入 输出 说明 Code 使 ...
- 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...
- IT公司100题-27-跳台阶问题
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 一个台阶总共有n阶,一次可以跳1级或者2级.求总共有多少种跳法. 分析: 用f(n)表示n阶台阶总共有多少种跳法. ...
- IT公司100题-10-翻转句子中单词的顺序
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号 ...
- IT公司100题-14-排序数组中和为给定值的两个数字
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 输入一个升序排序的数组,给定一个目标值target,求数组的两个数a和b,a+b=target.如果有多个组合满足 ...
最新文章
- STC单片机下载实验
- 计算机原理 英文版,计算机原理介绍英文版.doc
- Linux中常用到的命令
- 【转】6 个技巧,提升 C++11 的 vector 性能
- 2019一起走,健康幸运全都有
- 应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt
- 通过计算机网络进行的商务活动包括,电子商务练习题及答案
- linux-磁盘情况查询-待小结
- 中国人去日本买电饭煲令人痛心!董明珠:难道我泱泱大国造不出吗?
- Mysql的跨表更新
- ProjectWise 工程内容管理及协同工作解决方案系列网络讲座
- atom无法安装插件的解决方法之一
- 实习成长之路:操作系统——CPU有哪些工作模式呢?
- CTF杂项题解题思路与方法
- 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计 汉语言文学设计题材网页
- ubuntu如何安装rpm
- 三、网页中的超链接(hyperlink)
- 使用OpenCV测量图像中物体之间的距离
- 中科大和华师大计算机,今天就是你最后的机会,2019华师软件工程跨考经验
- 偶像的力量-松哥经典语录
热门文章
- MyBatis:参数传递 [转]
- 【原创】完美实现GetProcAddress [文字模式]
- 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型
- jquery easy ui 1.3.4 数据表格(DataGrid)(8)
- 新人新博客新学习家园
- shell脚本——字符串 数组
- 8 Django 模型层(2)
- Python爬虫:Xpath语法笔记
- Linux(CentOS)升级gcc到4.8.5版本
- PHP中对数据库操作的封装