zoukankan      html  css  js  c++  java
  • 算法-01-二叉树根节点到叶子节点和为指定值的路径

    描述

    给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径, 例如: 给出如下的二叉树,sum=22

    Java 

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @param sum int整型 
         * @return int整型ArrayList<ArrayList<>>
         */
        ArrayList<ArrayList<Integer>> results= new ArrayList<>();
        
        public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
            // write code here
            ArrayList<Integer> path =new ArrayList<>();
            if(root==null)
                return results;
            dfs(root,0,sum,path);
            return results;
        }
        
        public void dfs(TreeNode root,int nowSum, int sum, ArrayList<Integer> list){
            list.add(root.val);
            if(root.right==null&&root.left==null&&sum==nowSum+root.val){
                results.add(new ArrayList<>(list));
                return;
            }
            if(root.left!=null){
                dfs(root.left,nowSum+root.val,sum,list);
                list.remove(list.size()-1);
            }
            if(root.right!=null){
                dfs(root.right, nowSum+root.val,sum,list);
                list.remove(list.size()-1);
            }
        }
    }

     Python 

    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    #
    # 
    # @param root TreeNode类 
    # @param sum int整型 
    # @return int整型二维数组
    #
    class Solution:
        def pathSum(self , root , sum ):
            # write code here
            path = []
            paths = []
            self.dfs(root,sum,path,paths)
            return paths
            
        def dfs(self, root: TreeNode, sum :int, path: list, paths: list):
            if root is None:
                return None
            path.append(root.val)
            if root.left is None and root.right is None and sum==root.val:
                paths.append(path.copy())
            else:
                self.dfs(root.left,sum-root.val,path,paths)
                self.dfs(root.right,sum-root.val,path,paths)
            path.pop(len(path)-1)
      
    不要小瞧女程序员
  • 相关阅读:
    遮罩层代码
    get方法传递中文数据的时候如何进行转码
    Eclipse常用快捷键
    VS常用快捷键
    Java笔记10-Object包装类型字符串
    MySQL常用命令
    Oracle笔记3-高级查询
    Oracle笔记2-数据库设计
    Java笔记9-正则表达式
    Java笔记8-抽象接口
  • 原文地址:https://www.cnblogs.com/shix0909/p/15028414.html
Copyright © 2011-2022 走看看