leetcode--Binary Tree Paths

来源:互联网 发布:变音软件ios 版本 编辑:程序博客网 时间:2024/06/02 02:31

题目:Binary Tree Paths

Given a binary tree, return all root-to-leaf paths.

For example, given the following binary tree:

   1 /   \2     3 \  5

All root-to-leaf paths are:

["1->2->5", "1->3"]
解题思路:二叉树路径最好用的是递归,由于求解为路径所以一般是节点root、当前已有路径res、当前未结束路径sb作为因子进行递归。未结束路径易用StringBuilder表示

One:由于原函数返回值类型,不适合递归。所以需要辅助函数。

public class Solution {    public List<String> binaryTreePaths(TreeNode root) {        List<String> res = new ArrayList<String>();        if(root==null)return res;        StringBuilder sb = new StringBuilder();        findPaths(root,sb,res);        return  res;    }    private void findPaths(TreeNode root,StringBuilder sb,List<String> res){         if(root.right==null&&root.left==null){            sb.append(root.val);            res.add(sb.toString());            return;         }         sb.append(root.val);         sb.append("->");         int l = sb.length();         if(root.left!=null){            findPaths(root.left,sb,res);         }                  sb.setLength(l);                  if(root.right!=null){            findPaths(root.right,sb,res);         }    }    }

Two:进一步用String代替StringBuilder

public class Solution {    List<String> res = new ArrayList<String>();    public List<String> binaryTreePaths(TreeNode root) {        if(root==null)return res;        findPaths(root,String.valueOf(root.val));        return  res;    }    private void findPaths(TreeNode root,String path){         if(root.right==null&&root.left==null)res.add(path);         if(root.left!=null) findPaths(root.left,path+"->"+root.left.val);         if(root.right!=null)findPaths(root.right,path+"->"+root.right.val);    }    }

Three':在本函数里递归,运用for遍历

public List<String> binaryTreePaths(TreeNode root) {                List<String> paths = new LinkedList<>();        if(root == null) return paths;                if(root.left == null && root.right == null){            paths.add(root.val+"");            return paths;        }         for (String path : binaryTreePaths(root.left)) {             paths.add(root.val + "->" + path);         }         for (String path : binaryTreePaths(root.right)) {             paths.add(root.val + "->" + path);         }         return paths;            }


0 0
原创粉丝点击