<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    二叉樹求和問題

    Posted on 2013-04-16 11:37 小明 閱讀(2541) 評論(1)  編輯  收藏 所屬分類: 數據結構和算法
    問題給定一個二叉樹,每個節點的值是一個數字(0-9),每個從根節點到葉節點均能組成一個數字。
    比如如果從根節點到葉節點的路徑是1-2-3,那么這代表了123這個數字。
    求出所有這樣從根節點到葉節點的數字之和。

    比如,對于二叉樹
      1
     /  \
    2   3

    一共有兩條路徑1->2和1->3,那么求和的結果就是12+13=25
    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int sumNumbers(TreeNode root) {
            //write code here
        }
    }

    分析:
    此問題不難,主要是一個深度優先算法,使用了一個stringbuffer記錄當前的路徑,每次找到一個葉節點,就記下當前的值。當返回到上一層節點,注意要刪除最后一次用來回朔。

    代碼如下:

    public class SumTreeNodes {
        
        class TreeNode {
              int val;
              TreeNode left;
              TreeNode right;
              TreeNode(int x) { val = x; }
        }
        
        StringBuffer current = new StringBuffer();
        int sum = 0;
        
        private void dfs(TreeNode node){
            int val = node.val;
            current.append(val+"");
            if(node.left==null && node.right==null){ //leaf here
                sum += Integer.parseInt(current.toString());
            }
            else{
                if(node.left!=null){
                    dfs(node.left);
                    current.setLength(current.length()-1);
                }
                if(node.right!=null){
                    dfs(node.left);
                    current.setLength(current.length()-1);
                }
            }
        }
        
         public int sumNumbers(TreeNode root) {
             sum = 0;
             current.setLength(0);
             if(root!=null){
                 dfs(root);
             }
             return  sum;
         }
    }








    評論

    # re: 二叉樹求和問題[未登錄]  回復  更多評論   

    2013-04-17 11:08 by Harry
    object TreeVisitor {
    trait Monoid[A] {
    def mempty: A
    def mappend(a: A, b: A): A
    }
    implicit object IntMonoid extends Monoid[Int] {
    def mempty = 0
    def mappend(a: Int, b: Int) = a * 10 + b
    }
    implicit object StringMonoid extends Monoid[String]{
    def mempty = ""
    def mappend(a:String,b:String) = a+b
    }

    trait Tree[A]
    case class TreeNode[A](n: A, left: Tree[A], right: Tree[A]) extends Tree[A]
    case class Leaf[A](num: A) extends Tree[A]

    def visitTree[A: Monoid](t: Tree[A], path: A): List[A] = {
    val ev = implicitly[Monoid[A]]
    t match {
    case TreeNode(n, left, right) =>
    visitTree(left, ev.mappend(path, n)) ++ visitTree(right, ev.mappend(path, n))
    case Leaf(num) => List(ev.mappend(path, num))
    }
    }
    def main(args: Array[String]): Unit = {
    val t1 = TreeNode(10, Leaf(7), Leaf(8))
    val t2 = TreeNode(200, t1, Leaf(9))
    val t3 = TreeNode(3000, t2, t2)
    val t4 = TreeNode(40000, t3, t2)
    val sumt = visitTree(t4,0).sum
    println(sumt)
    val s1 = TreeNode("1",Leaf("2"),Leaf("3"))
    val s2 = TreeNode("2",s1,Leaf("4"))
    val sums = visitTree(s2,"") map {x=>x.toInt}
    println(sums.sum)


    }

    }
    主站蜘蛛池模板: 久久久久久a亚洲欧洲AV| 男女交性永久免费视频播放| 亚洲一区二区三区影院 | 亚洲精品A在线观看| 色九月亚洲综合网| 大陆一级毛片免费视频观看 | 日韩国产欧美亚洲v片| 免费网站看v片在线香蕉| 亚洲中文字幕无码久久2020| 成人黄页网站免费观看大全| 亚洲国产精品自在自线观看| 国产zzjjzzjj视频全免费| 曰批全过程免费视频免费看 | 嫩草视频在线免费观看| 亚洲人av高清无码| 免费国产a国产片高清网站| 一级毛片在线免费播放| 亚洲国产一成人久久精品| 久久aa毛片免费播放嗯啊| 亚洲人成电影在线观看网| 影音先锋在线免费观看| 免费无码AV一区二区| 亚洲精品无码专区久久久| 91香蕉国产线观看免费全集| 亚洲成A人片在线播放器| 亚洲av无码天堂一区二区三区 | 免费观看黄色的网站| 亚洲精品无码成人片久久不卡| 免费一级毛片清高播放| 无码人妻精品中文字幕免费| 国产成人精品日本亚洲专| 亚洲成AV人网址| 99热这里只有精品6免费| 亚洲乱亚洲乱妇24p| 日本亚洲欧洲免费天堂午夜看片女人员| 蜜桃视频在线观看免费视频网站WWW| 亚洲中文字幕无码中文| 国产亚洲A∨片在线观看| 丁香花免费高清视频完整版| 一本久久免费视频| 亚洲免费一级视频|