LintCode - 二叉树的路径和(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:普通
要求:

给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。
一个有效的路径,指的是从根节点到叶节点的路径。

样例:

给定一个二叉树,和 目标值 = 5:

     1
    / \
   2   4
  / \
 2   3

返回:

[
  [1, 2, 2],
  [1, 4]
]
思路:

递归遍历

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root the root of binary tree
     * @param target an integer
     * @return all valid paths
     */
    public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();

        //获取所有路径
        List<String> list = new ArrayList<String>();
        if(root != null){
            addPath(root,String.valueOf(root.val), list);
        }

        //检查
        for(String path : list){
            String[] paths = path.split(",");
            
            int num = 0;
            for(String val : paths){
                num += Integer.parseInt(val);
            }

            if(target == num){
                List<Integer> data = new ArrayList<Integer>();
                for(String val : paths ){
                    data.add(Integer.parseInt(val));
                }
                result.add(data);
            }
        }
        return result;
    }
    
    /**
     * 添加路径 
     */
    private void addPath(TreeNode node,String path,List<String> list){
       if(node == null){
            return;
        }
        
        if(node.left == null && node.right == null){
            list.add(path);
        }
        
        if(node.left != null){
            addPath(node.left,path + "," + String.valueOf(node.left.val),list);
        }
        
        if(node.right != null){
            addPath(node.right,path + "," + String.valueOf(node.right.val),list);
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,951评论 1 31
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,629评论 0 12
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 9,813评论 1 5
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:普通 要求: 给定一个二叉树,找出所有路径中各节点相加...
    柒黍阅读 2,299评论 0 0
  • 面试题7:重建二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果。请重建该二叉树。假设输入的前序遍历和中序遍历...
    lyoungzzz阅读 3,633评论 0 0

友情链接更多精彩内容