在二元树中找出和为某一值的所有路径
来源:互联网 发布:人工智能企业 编辑:程序博客网 时间:2024/06/06 04:03
请写一个程序创建一棵二元树,并按照一定规则,输出二元树根节点到叶子节点的路径。规则如下:
从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设置的某一值的相同,那么输出这条路径上的所有节点。从根节点遍历树时,请请按照左到右遍历,即优先访问左子树的节点。
比如下面一些转化的例子:
输入"10,5,12,4,7"值,构造的树如下(注意:构造二元树时,需要从上到下一层一层的,按照从左到右的顺序进行构造)
1) 10
2) 10
/
5
3) 10
/\
5 12
4) 10
/\
5 12
/
4
5) 10
/\
5 12
/\
4 7
如果当前我们设置的“路径和”为19,那么输出结果为:"10,5,4$",如果当前我们设置的值为22,那么输出结果为:"10,5,7$10,12$",$字符表
示结尾。如果没有找到路径和为设置的值的路径,输出'\0',即无显示
import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Stack;class Node{int data;Node lChild;Node rChild;boolean visited;}public class Main{static boolean flag=false;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int num=scanner.nextInt();Stack<Node> stack=new Stack<Node>();String s=scanner.next();String[] str=s.split(",");Node root=create(str);findPath(root,num,stack,0);if(flag==false){System.out.println("\0");}}@SuppressWarnings("unchecked")public static void findPath(Node root,int num,Stack<Node> stack,int temp){if(root==null){return;}if(root.visited==true){return;}temp=temp+root.data;root.visited=true;stack.add(root);if(temp<num){if(root.lChild!=null&&root.lChild.visited==false){findPath(root.lChild,num,stack,temp);}Stack<Node> s=(Stack<Node>) stack.clone();if(root.rChild!=null&&root.rChild.visited==false){findPath(root.rChild,num,s,temp);}if(root.lChild==null&&root.rChild==null){Node p=stack.pop();temp=temp-p.data;return;}}if(temp>num){Node p=stack.pop();temp=temp-p.data;return;}if(temp==num){if(root.lChild==null&&root.rChild==null){flag=true;Stack<Node> result=new Stack<Node>();String s="";Node p;while(!stack.isEmpty()){result.add(stack.pop());}while(!result.isEmpty()){p=result.pop();s=s+p.data+",";}s=s.substring(0,s.length()-1)+"$";System.out.println(s);}else{Node p=stack.pop();temp=temp-p.data;return;}}}public static Node create(String[] str){Node root=new Node();Node p,q;int temp;Queue<Node> queue=new LinkedList<Node>();queue.add(root);for(int i=0;i<str.length;i++){temp=Integer.parseInt(str[i]);q=new Node();q.data=temp;p=queue.peek();while(p!=null&&p.lChild!=null&&p.rChild!=null){queue.poll();p=queue.peek();}if(p.data==0){p.data=temp;continue;}if(p.lChild==null){p.lChild=q;queue.add(q);continue;}if(p.rChild==null){p.rChild=q;queue.add(q);continue;} }return root;}}
0 0
- 在二元树中找出和为某一值的所有路径的个人代码
- 在二元树中找出和为某一值的所有路径(树)
- 在二元树中找出和为某一值的所有路径(树)
- 4.在二元树中找出和为某一值的所有路径(树)
- No4、在二元树中找出和为某一值的所有路径(树)
- 在二元树中找出和为某一值的所有路径(树)
- 在二元树中找出和为某一值的所有路径(树)
- 4.在二元树中找出和为某一值的所有路径(树)
- 4.在二元树中找出和为某一值的所有路径(树)
- 4.在二元树中找出和为某一值的所有路径(树)
- 在二元树中找出和为某一值的所有路径-递归算法
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 算法讨论(三)---在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- 算法题23 在二元树中找出和为某一值的所有路径
- 在二元树中找出和为某一值的所有路径
- android xml布局文件中EditText的属性详解
- React Native开源项目如何运行(附一波开源项目)
- [ADAMS]Adams-matlab联合仿真
- 多面体的研究
- Servlet学习笔记---Session
- 在二元树中找出和为某一值的所有路径
- [leetcode] 47. Permutations II
- 论文中图片加方框并且放大显示 matlab代码
- php单利模式
- 《JAVA开发环境之安装与配置》
- 华为OJ——求最小公倍数
- 配置Java的环境变量
- hadoop源码之Job提交
- 联合使用DatePIcker和TimePicker来选择日期和时间