二元树中和为某一值的所有路径
来源:互联网 发布:mac换硬盘重装系统 编辑:程序博客网 时间:2024/06/03 15:21
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
思路:先寻找从根节点到叶子节点的所有路径,将这些节点压进栈中,当遇到叶子节点时,判断sum是否为0,如果为0,则逆序输出栈中的节点的值,即为要求的输出。
如果遇到的不是叶子节点,则先将左节点压栈,并改变相应的sum。左节点判断完后,将左节点出栈,并相应的修改sum,开始判断右子树。当右子树判断完成后,该树检测完成。
何海涛的网易日志:http://zhedahht.blog.163.com/blog/static/254111742007228357325/
代码:
/** * 题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 * @author hongbin.gao * */public class FindPath {public static void main(String[] args){//本测试用例和何海涛中的测试用例相同。TreeNode root = new TreeNode(10);TreeNode p1 = new TreeNode(5);TreeNode p2 = new TreeNode(12);TreeNode p3 = new TreeNode(4);TreeNode p4 = new TreeNode(7);root.left = p1; root.right = p2;p1.left = p3; p1.right = p4;p2.left = p2.right = null;p3.left = null; p3.right = null;p4.left = p4.right = null;Stack<TreeNode> stack = new Stack<TreeNode>();int sum = 22;if(root == null && sum ==0)return ;else{stack.push(root);sum -= root.val;findPath(sum,stack);}}public static void findPath(int sum, Stack<TreeNode> stack){TreeNode pNode = null;if(sum == 0 && stack.peek().left == null && stack.peek().right == null){ //如果sum==0,并且到达叶节点,准备输出Stack<TreeNode> temp = new Stack<TreeNode>();while(!stack.isEmpty()){TreeNode p = stack.pop();temp.push(p);}while(!temp.isEmpty()){TreeNode p = temp.pop();if(!temp.isEmpty()) System.out.print(p.val + ",");if(temp.isEmpty())System.out.println(p.val + ";");stack.push(p);}return ;}if(sum != 0 && stack.peek().left == null && stack.peek().right == null) //如果已经到达叶节点,但是sum!=0,则直接返回,不做处理。return ;if(stack.peek().left != null){ //如果不是叶节点,并且存在左子树。pNode = stack.peek().left;sum -= pNode.val;stack.push(pNode);findPath(sum,stack);sum += pNode.val;stack.pop();}if(stack.peek().right != null){ //如果存在右子树,则进行右子树的递归pNode = stack.peek().right;sum -= pNode.val;stack.push(pNode);findPath(sum,stack);sum += pNode.val;stack.pop();}return ;}}
0 0
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径[数据结构]
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径[数据结构]
- 二元树中和为某一值的所有路径[数据结构]
- 找出二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径
- 二元树中和为某一值的所有路径(递归与非递归的方法)
- 面试题-二元树中和为某一值的所有路径[数据结构]
- 二元树中和为某一值的所有路径(我看到网上很多答案是错的)
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
- 程序员面试题精选100题(04)-二元树中和为某一值的所有路径[数据结构]
- android 图片宽度填满屏幕宽度,图片高度根据图片的比例自动匹配,这样就不会拉伸图片
- redis windows安装包
- Homebrew简介及安装
- 拦截器登录判断
- 数学之美番外篇:进化论中的概率论
- 二元树中和为某一值的所有路径
- 触发器学习《二》 需求示例--人员关系表、人员表
- 一个关于NSString内存管理的问题
- Java JDBC 之 URL 与数据库连接
- Activity四种启动方式
- Java 多线程:分析线程池的实现原理
- git管理项目代码
- 杭电ACM—1106 排序
- js对table的操作