zoukankan      html  css  js  c++  java
  • 牛客_剑指offer题集——二叉树中和为某一值的路径(java实现)

    题目链接:

    https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    思路:边遍历边记录节点,如果节点和等于目标值,则在全局变量中加入路径

    需要注意的点:

    1. 因为arrayList传入方法后会产生永久性改变,所以要进行回溯,否则会将所有节点记录

    2.    因为定义的一个对象就对应一个特定的对象,所以在存入全局变量时需要新建立对象,否则存入的只是指针,在后续的操作中存入的数据也会改变

    实现源码:

    package niuke;
    
    import java.util.ArrayList;
    
    public class 二叉树中和为某一值的路径 {
        private ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
            find_path_by_inOrder(new ArrayList<Integer>(),root,target,0);
            return this.list;
        }
    
        private void find_path_by_inOrder(ArrayList<Integer> list
                ,TreeNode root,int target,int sum){
            if(root==null){
                list.add(0);
                return;
            }
            list.add(root.val);
            sum += root.val;
            if(root.right==null&&root.left==null&&sum==target){//确定是叶子结点
                this.list.add(new ArrayList<Integer>(list));
                //注意此处加进去的列表一定要新建,否则加进去的只是指针,后来全部一样
                return;
            }else if(root.right==null&&root.left==null)
                return;
    
            find_path_by_inOrder(list,root.left,target,sum);
            list.remove(list.size()-1);
            find_path_by_inOrder(list, root.right, target, sum);
            list.remove(list.size()-1);
        }
    }

    代码已经ac

    希望对大家有所帮助

    以上

  • 相关阅读:
    wenbao与分治
    wenbao与贪心
    wenbao与高精度
    wenbao与FFT
    wenbao与卡特兰数
    wenbao与类
    wenbao与取整函数
    wenbao与字符串转化
    wenbao与scanf
    wenbao与数字与字符串
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/12448035.html
Copyright © 2011-2022 走看看