码迷,mamicode.com
首页 > 其他好文 > 详细

在二元树中找出和为某一值的所有路径

时间:2017-02-25 21:10:50      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:pack   tle   所有路径   treenode   log   style   ova   pac   tac   

题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。

例如输入整数 22 和如下二元树 :

10
/

5 12
/\
47
则打印出两条路径:10, 12 和 10, 5, 7。 

 1 package data.structure.exercise;
 2 
 3 import java.util.LinkedList;
 4 
 5 
 6 public class BinaryTree extends BinarySearchTree{
 7     
 8     LinkedList<TreeNode> pathStack = new LinkedList<TreeNode>();
 9     
10     public BinaryTree(int root){
11         
12         super(root);
13     }
14 
15     
16     public void findPathSum(int sum){
17         if(this.getRoot() == null){
18             return;
19         }
20         dfs(this.getRoot(), sum);
21     }
22     
23     private void dfs(TreeNode node, int current){
24         if(node == null){
25             return;
26         }
27         
28         pathStack.push(node);;
29         
30         if(node.getLnode() == null && node.getRnode() == null){
31             //being a path and calculate the sum
32             if(current == node.getValue()){
33                 printPath(pathStack);
34             }
35         }else{
36             //traverse left node
37             if(node.getLnode() !=null){
38                 
39                 dfs(node.getLnode(), current - node.getValue());
40             }
41             
42             //traverse right node
43             if(node.getRnode() !=null){
44                 dfs(node.getRnode(), current - node.getValue());
45             }
46         }
47         pathStack.pop();
48         
49     }
50     
51     private void printPath(LinkedList<TreeNode> pathStack){
52         for(TreeNode node:pathStack){
53             System.out.print(node.toValueString()+"=");
54         }
55         System.out.println();
56     }
57     
58     public static void main(String[] args){
59         BinaryTree tree = new BinaryTree(10);
60         tree.insert(5);
61         tree.insert(12);
62         tree.insert(4);
63         tree.insert(7);
64 
65         
66         System.out.println("root.left: "+ tree.getRoot().getLnode().toString());
67 
68         tree.findPathSum(22);
69     }
70 }
BinarySearchTree参考上篇博文

 

在二元树中找出和为某一值的所有路径

标签:pack   tle   所有路径   treenode   log   style   ova   pac   tac   

原文地址:http://www.cnblogs.com/gui0901/p/6442750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!