Java实现:在二元树中找出和为某一值的所有路径
2015-02-02 23:50
423 查看
题目:
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数 22
和如下二元树
10
/ \
5 12
/ \
4 7
解题思路:
二叉树的中序递归。
Java实现:
测试:
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数 22
和如下二元树
10
/ \
5 12
/ \
4 7
解题思路:
二叉树的中序递归。
Java实现:
public class BinaryTreeNode { private Integer value; private BinaryTreeNode leftNode; private BinaryTreeNode rightNode; public void add(int value){ if (this.value == null){ this.value = value; return; } if (value > this.value){ if (this.rightNode == null){ this.rightNode = new BinaryTreeNode(); this.rightNode.value = value; } else { this.rightNode.add(value); } } else if (value < this.value){ if (this.leftNode == null){ this.leftNode = new BinaryTreeNode(); this.leftNode.value = value; } else { this.leftNode.add(value); } } } public List<List<Integer>> pathListOfSum(int sum){ List<List<Integer>> resultList = new ArrayList<List<Integer>>(); pathListOfSum(new ArrayList<Integer>(), resultList, sum, 0); return resultList; } private void pathListOfSum(List<Integer> pathList, List<List<Integer>> resultList, int expectSum, int actualSum){ // 处理当前节点 pathList.add(this.value); actualSum += this.value; if (this.leftNode == null && this.rightNode == null){ if (actualSum == expectSum){ List<Integer> copyList = new ArrayList<Integer>(pathList.size()); for (Integer data : pathList){ copyList.add(data); } resultList.add(copyList); } } // 递归处理左子节点 else if (this.leftNode != null){ this.leftNode.pathListOfSum(pathList, resultList, expectSum, actualSum); } // 递归处理右子节点 else if (this.rightNode != null){ this.rightNode.pathListOfSum(pathList, resultList, expectSum, actualSum); } pathList.remove(pathList.size() - 1); actualSum -= this.value; } }
测试:
@Test public void testPathListOfSum() { BinaryTreeNode bTree = new BinaryTreeNode(); bTree.add(10); bTree.add(12); bTree.add(5); bTree.add(7); bTree.add(4); List<List<Integer>> resultList = bTree.pathListOfSum(22); for (List<Integer> list : resultList){ System.out.println(list); } }
[10, 5, 7] [10, 12
相关文章推荐
- 【面试题】在二元树中找出和为某一值的所有路径——Java实现
- 每天一道算法题(1)——在二元树中找出和为某一值的所有路径(java代码)
- 程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径—python实现
- (转)在二元树中找出和为某一值的所有路径,java版本
- 在二叉树中找出和为某一值的所有路径-java实现
- 在二元树中找出和为某一值的所有路径 C++实现
- 4.在二元树中找出和为某一值的所有路径
- 解题笔记(6)——在二元树中找出和为某一值的所有路径(树)
- 程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径
- 练习系列 - 6、在二元树中找出和为某一值的所有路径
- 【转帖】在二元树中找出和为某一值的所有路径
- 【面试题】在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径的个人代码
- 算法讨论(三)---在二元树中找出和为某一值的所有路径
- 程序员面试100题之四,在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径
- 程序员面试题精选(04)-在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 100题_04 在二元树中找出和为某一值的所有路径