RoottoLeafPaths

题目:
找到binary tree的所有Root to Leaf的 Paths  。

题目分析:
这道题可以通过top-down的方式解决。

代码:
public class RoottoLeafPaths {

    static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val){
            this.val = val;
        }
    }

    public static List<String> paths = new ArrayList<>();
    public List<String> getPaths(TreeNode root){
        if(root == null){
            return paths;
        }
        StringBuilder sb = new StringBuilder();
        helper(root, sb);
        return paths;
    }

    private void helper(TreeNode root, StringBuilder sb) {
        sb.append(root.val);
        if(root.left == null && root.right == null){
            paths.add((new StringBuilder(sb)).toString());
        }
        else {
            if(root.left != null && root.right != null){
                helper(root.left, (new StringBuilder(sb)).append("->"));
                helper(root.right, (new StringBuilder(sb)).append("->"));
            }
            else if(root.left != null){
                helper(root.left, new StringBuilder(sb.append("->")));
            }
            else {
                helper(root.right, new StringBuilder(sb.append("->")));
            }
        }
    }

    public static void main(String[] args){
        TreeNode node4 = new TreeNode(4);
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);

        node3.right = node2;
        node3.left = node1;
        node6.left = node5;
        node6.right = node7;
        node4.left = node3;
        node4.right = node6;

        RoottoLeafPaths roottoLeafPaths = new RoottoLeafPaths();
        roottoLeafPaths.getPaths(node4);
        for(int i = 0; i <= paths.size() - 1; i++){
            System.out.println(paths.get(i));
        }

    }

}

Comments

Popular Posts