• 二叉树中和为某一值的路径-剑指Offer


    二叉树中和为某一值的路径

    题目描述

    输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

    思路

    1. 用栈来存储二叉树的路径,遍历到叶子结点就判断是否总和为target,是的话打印,若不是叶子结点,那继续遍历左右子树
    2. 注意:打印完后返回父结点时要弹出栈顶的叶子结点,并且总和减去该值
    3. 注意:打印路径时要遍历栈

    代码

    import java.util.ArrayList;
    import java.util.Stack;
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
            ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
            if (root == null || target == 0) {
            	return list;
            }
            Stack<Integer> stack = new Stack<Integer>();
            int sum = 0;
            find(root, list, stack, sum, target);
            return list;
        }
    	public void find(TreeNode root,  ArrayList list, Stack<Integer> stack, int sum, int target) {
    		sum += root.val;
    		stack.push(root.val);
    		
    		boolean isLeaf = (root.left == null) && (root.right == null);
    	// 如果是叶结点,并且总和等于target
        // 存储该路径
    		if ((sum == target) && isLeaf) {
    			ArrayList<Integer> intList = new ArrayList<Integer>();
    			for (Integer x: stack) {
    				intList.add(x);
    			}
    			list.add(intList);
    		}
        // 如果不是叶子结点,遍历左右子结点
    		if (root.left != null) {
    			find(root.left, list, stack, sum, target);
    		}
    		if (root.right != null) {
    			find(root.right, list, stack, sum, target);
    		}
        // 返回父节点之前,在路径上删除当前结点
        // 并在sum中减去该值
    		sum -= root.val;
    		stack.pop();
    	}
    }
  • 相关阅读:
    The connection to adb is down, and a severe error has occured.问题解决
    JavaScript的实现
    Dreamer2.1 发布 新增将Bean解析成xml和json
    由某公司的面试小题目说起,对责任链模式的总结
    TCP协议中的SO_LINGER选项
    杭电2602(01背包问题)——第一次做背包问题的理解
    [置顶] 浏览器模式和标准对于javascript的影响
    李克强总理坚决不“救市”底气何来?
    lua序列化table表到文件中
    获取java byte的无符号数值
  • 原文地址:https://www.cnblogs.com/rosending/p/5628064.html
Copyright © 2020-2023  润新知