力扣257 补9.8

257.二叉树的所有路径

虽然简单题,但太久没写题了,直接看答案,事实上就是正常的按照前序遍历每个结点,找到一个节点就放进path里,一直等到找到叶子结点,一个path结束,然后就是回溯,把最后一个结点删了,进入另一个递归。

相当于就是基本的一次树的遍历,在加上回溯(删除并修改结点)。

然后代码实现的话,用Java麻烦一点,因为string不允许修改。

class Solution {

    List strs=new ArrayList();

    public List binaryTreePaths(TreeNode root) { 

        if(root==null){

            return strs;

        }

        dfs(root,"",strs);

        return strs;

    }

    void dfs(TreeNode root,String path,List strs){

    StringBuffer pathSB = new StringBuffer(path);    

    pathSB.append(Integer.toString(root.val));   

    if(root.left==null&&root.right==null){

            strs.add(pathSB.toString());

            return;

        }

        if(root.left!=null||root.right!=null){

            pathSB.append("->");

        }

        if(root.left!=null){

        dfs(root.left,pathSB.toString(),strs);

        }

        if(root.right!=null){

        dfs(root.right,pathSB.toString(),strs);

        }

    }

}

 

你可能感兴趣的:(力扣,数据结构,算法,leetcode)