給定一個二叉樹,找出所有路徑中各節點相加總和等于給定 目標值 的路徑。
一個有效的路徑,指的是從根節點到葉節點的路徑。
樣例
給定一個二叉樹,和 目標值 = 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) { // Write your code here return dfs(root,new ArrayList<Integer>(),0,new ArrayList<List<Integer>>(),target); } public List<List<Integer>> dfs(TreeNode root,List<Integer> node, int sum, List<List<Integer>> paths,int target) { if(root==null) { return new ArrayList<List<Integer>>(); } List<List<Integer>> path=new ArrayList<List<Integer>>(); if(root.left!=null) { List<Integer> nodes=new ArrayList<Integer>(); if(node!=null) { nodes.addAll(node); } nodes.add(root.val); List<List<Integer>> temp=dfs(root.left,nodes,sum+root.val,paths,target); if(temp!=null) { path.addAll(temp); } } if(root.right!=null) { List<Integer> nodes=new ArrayList<Integer>(); if(node!=null) { nodes.addAll(node); } nodes.add(root.val); List<List<Integer>> temp=dfs(root.right,nodes,sum+root.val,paths,target); if(temp!=null) { path.addAll(temp); } } if(root.left==null&&root.right==null) { List<Integer> nodes=new ArrayList<Integer>(); if(node!=null) { nodes.addAll(node); } nodes.add(root.val); if(sum+root.val==target) { path.add(nodes); } else{ path=new ArrayList<List<Integer>>(); } } return path; }}
referance
總結
以上就是本文關于Java二叉樹路徑和代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答
圖片精選