本文主要是介绍[剑指offer] 二叉树中和为某一值的路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
解题思路
用前序遍历的方式访问到某一结点时,把该结点添加到路径上,并用目标值减去该节点的值。如果该结点为叶结点并且目标值减去该节点的值刚好为0,则当前的路径符合要求,我们把加入res数组中。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到它的父结点。因此我们在函数退出之前要在路径上删除当前结点,以确保返回父结点时路径刚好是从根结点到父结点的路径。
叶子结点 就是度为0的结点 就是没有子结点的结点.
参考代码
import java.util.ArrayList;
/**
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
*/
public class Solution {ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();ArrayList<Integer> temp = new ArrayList<Integer>();public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {if(root == null)return res;target -= root.val;temp.add(root.val);if(target == 0 && root.left == null && root.right == null)res.add(new ArrayList<Integer>(temp));else{if(root.left!=null){FindPath(root.left, target);}if(root.right!=null){FindPath(root.right, target);}}temp.remove(temp.size()-1);return res;}
}
这篇关于[剑指offer] 二叉树中和为某一值的路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!