zoukankan      html  css  js  c++  java
  • 129. Sum Root to Leaf Numbers

    题目:

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

    An example is the root-to-leaf path 1->2->3 which represents the number 123.

    Find the total sum of all root-to-leaf numbers.

    For example,

        1
       / 
      2   3
    

    The root-to-leaf path 1->2 represents the number 12.
    The root-to-leaf path 1->3 represents the number 13.

    Return the sum = 12 + 13 = 25.

    代码:

    作为第一个做的Medium级别的题目,还是有点困难的。

    关键两步都参考了百度:1. 递归的方式创建一颗二叉树(用来测试);2. 递归的方式深度优先遍历二叉树并求和。

     1. 递归的方式创建一颗二叉树(用来测试):

    递归方法简历二叉树,就不多说了,有兴趣去调试一下,一目了然。

    public TreeNode(int[] array){
            root=makeBinaryTreeByArray(array,1);
        }

        /**
         * 采用递归的方式创建一颗二叉树
         * 传入的是二叉树的数组表示法
         * 构造后是二叉树的二叉链表表示法
         */
        public static TreeNode makeBinaryTreeByArray(int[] array,int index){
    //        System.out.print("递归建树数组剩余: "+index+array.length);
            if(index<array.length){
                int value=array[index];
    //            if(array[index]!=0){
                    TreeNode t=new TreeNode(value);
                    array[index]=0;
                    t.left=makeBinaryTreeByArray(array,index*2);
                    t.right=makeBinaryTreeByArray(array,index*2+1);
                    return t;
    //            }
            }
            return null;
        }

    2. 递归的方式深度优先遍历二叉树并求和:

    从root节点开始,调用sumNumbers(),首先将root的值计入变量tmpsum。

    如果左子树不为空,以左子树节点为参数,递归调用sumNumbers()函数,此时第一次记录root的值*10加上该节点的值。

    左子树优先处理,所以会一直调用完,相当于深度优先遍历,组合出全部左树的结果。

    左子树处理之后就回去遍历右子树,每次都是先左后右。

    如果右子树不为空,同样以右子树节点为参数,递归调用sumNumbers()函数,此时第一次记录root的值*10加上该节点的值。

    某个节点左右子树都未空时,说明当前已经是最下层节点了,于是*10+val生成本条路径的tmpsum,之后加入变量result中。

    解释了这么多,肯定还是懵逼,自己去画一个二叉树,试一试就发现,是这个样子滴!

        int result;
        public int sumNumbers(TreeNode root) {
            if(root==null){
                System.out.println("empty tree");
             return 0;
             }
            result =0 ;
            sumnuber(root,0);
            System.out.print(result);
            return result;
        }    
        public int sumnuber(TreeNode root,int tmpsum) {
             if(root.left == null && root.right == null)  
             {  
                 result += tmpsum * 10 + root.val;  
    //             System.out.print(result+" ");
             }  
             if(root.left != null)  
             {  
                 sumnuber(root.left, tmpsum * 10 + root.val);
             }  
             if(root.right != null)  
             {  
                 sumnuber(root.right, tmpsum * 10 + root.val);  
             }
             return result;
        }   

  • 相关阅读:
    英语翻译预测
    mybatis 实现增删改查
    jsp项目 在maven中使用,web.xml pome.xml 的配置
    来整理一份我觉得比较重要的小概念
    前端开发项目资源网站
    css 选择器符号
    css实现三栏布局的几种方法及优缺点
    MVC设计思想
    WebSocket 与 Polling , Long-Polling , Streaming 的比较!
    移动端视频h5表现问题汇总
  • 原文地址:https://www.cnblogs.com/yuanzhaoyi/p/5857005.html
Copyright © 2011-2022 走看看