美文网首页
给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的

给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的

作者: 白驹过隙_a | 来源:发表于2019-01-07 21:13 被阅读0次

    思路:以先序遍历(根节点-左子树-右子树)的方式访问二叉树的每一个节点,记录根节点到遍历到这个节点的所有节点值之和,同时用一个list存储遍历的路径,若节点和等于给定值则返回路径,直到叶子节点,结束递归。

    用到的数据结构:ArrayList,stack

    代码如下:

    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>> result = new ArrayList<ArrayList<Integer>>();
            if(root==null){
                return result;
            }
            Stack<Integer> stack = new Stack<>();
            FindPath(root, target, stack, result);
            return result;
        }
        
        private void FindPath(TreeNode root, int target, Stack<Integer> stack, ArrayList<ArrayList<Integer>> result) {
            if(root==null){
                return;
            }
            if(root.left==null&&root.right==null){
                if(root.val==target){
                    ArrayList<Integer> list = new ArrayList<>();
                    for(int i:stack){
                        list.add(i);
                    }
                    list.add(root.val);
                    result.add(list);
                }
            }else{
                stack.push(root.val);
                FindPath(root.left, target-root.val, stack, result);
                FindPath(root.right, target-root.val, stack, result);
                stack.pop();
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的

          本文链接:https://www.haomeiwen.com/subject/tgiprqtx.html