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();
    	}
    }
  • 相关阅读:
    Java四种内部类
    Java多态详解
    为啥java要使用 set ()和get()方法---封装
    Python---django轻量级框架
    java 读取数据库数据转化输出XML输出在jsp页面
    操作系统专栏
    learn more ,study less(三):超越整体性学习
    learn more ,study less(二):整体性学习技术(下)
    learn more ,study less(二):整体性学习技术(上)
    Spring博客专栏
  • 原文地址:https://www.cnblogs.com/rosending/p/5628064.html
Copyright © 2011-2022 走看看