zoukankan      html  css  js  c++  java
  • 二叉树中和为某一值的路径-剑指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();
    	}
    }
  • 相关阅读:
    跟我学SharePoint 2013视频培训课程——什么是SharePoint 2013(1)
    SharePoint 关于拓扑错误的解决方案
    SharePoint 2010、2013多个域之间互信(Domain Trust)的设计与实施
    SharePoint 2013 Disaster Recovery——迁移内容数据库
    windows-根据进程PID 获取进程路径
    kernel 获取ntoskrnl.exe基址
    ring3 x32挂起进程注入原理.
    CryEntryBuffer
    windows内核代码之进程操作
    驱动中遍历模块,以及获取ntoskrnl.exe基址
  • 原文地址:https://www.cnblogs.com/rosending/p/5628064.html
Copyright © 2011-2022 走看看