• 二叉树中和为某一值的路径-剑指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();
    	}
    }
  • 相关阅读:
    短期阅读的书籍
    Expert .NET 2.0 IL Assembler 译者序
    Prism研究(for WPF & Silverlight)4.从Hello World开始(实战篇)
    (翻译) 《C# to IL》第一章 IL入门
    不申请连任MVP了,把机会留给新人吧!
    (翻译) 《C# to IL》第三章 选择和循环
    Prism研究(for WPF & Silverlight) 13
    (翻译) 《C# to IL》第二章 IL基础
    Resharper使用体会及一些资料
    推荐一个PD Report Model
  • 原文地址:https://www.cnblogs.com/rosending/p/5628064.html
Copyright © 2020-2023  润新知