Java實現求二叉樹的路徑和


題:

  

解:

  這道題考的是如何找出一個二叉樹里所有的序列。

  我的思路是先從根節點開始遍歷,找出所有的子節點,因為每個子節點只有一個父節點,再根據每個子節點向上遍歷找出所有的序列,再判斷序列的總和。

  這樣解效率不高,但暫時只能想到這樣。如果您有其余的解法,期望告知。

代碼:

  

 1 package com.lintcode;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.Enumeration;
 6 import java.util.List;
 7 
 8 import javax.swing.tree.DefaultMutableTreeNode;
 9 import javax.swing.tree.TreeNode;
10 
11 /**
12  * 二叉樹的路徑和
13  * 給定一個二叉樹,找出所有路徑中各節點相加總和等於給定 目標值 的路徑。
14  * 一個有效的路徑,指的是從根節點到葉節點的路徑。
15  * @author Administrator
16  */
17 public class Test_002 {
18 //    得到所有最下面的子節點,再根據子節點向上遍歷得到序列,每個子節點只能有一個父節點,
19 //    所以可以得到所有的序列,再判斷序列的值是否等於需要的值。
20     /**
21      * @param args
22      */
23     public static void main(String[] args) {
24         DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(2);
25         node1.add(new DefaultMutableTreeNode(2));
26         DefaultMutableTreeNode node7 = new DefaultMutableTreeNode(3);
27         node7.add(new DefaultMutableTreeNode(6));
28         node1.add(node7);
29         DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(4);
30         DefaultMutableTreeNode top = new DefaultMutableTreeNode(1);
31         top.add(node1);
32         top.add(node2);
33         binaryTreePathSum(top,5);
34         for (List<Integer> list : result) {
35             System.out.println(list);
36         }
37     }
38     static List<List<Integer>> result = new ArrayList<List<Integer>>();
39     /**
40      * @param root the root of binary tree
41      * @param target an integer
42      * @return all valid paths
43      */
44     public static void binaryTreePathSum(TreeNode root, int target) {
45         if (root.getChildCount()!=0) {
46             Enumeration nodes = root.children();
47             while (nodes.hasMoreElements()) {
48                 binaryTreePathSum((TreeNode)nodes.nextElement(),5);
49             }
50         } else {
51             addList(root,new ArrayList<Integer>(), 5);
52         }
53     }
54     
55     public static void addList(TreeNode root, List<Integer> temp, int target) {
56         List<Integer> list = temp;
57         list.add(Integer.parseInt(root.toString()));
58         if (root.getParent()!=null) {
59             addList(root.getParent(), list, 5);
60         } else {
61             Collections.sort(list);
62             int count = 0;
63             for (Integer integer : list) {
64                 count+=integer;
65             }
66             if (count==target) {
67                 result.add(list);
68             }
69         }
70     }
71 }

  這段代碼在我的機子上運行是沒問題的,但是在LintCode上面運行時總是提示找不到TreeNode的getChildCount方法,如果您知道原因的話,期望留言,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM