1. 程式人生 > >LeetCode刷題Easy篇Binary Tree Paths

LeetCode刷題Easy篇Binary Tree Paths

題目

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

Note: A leaf is a node with no children.

Example:

Input:

   1
 /   \
2     3
 \
  5

Output: ["1->2->5", "1->3"]

Explanation: All root-to-leaf paths are: 1->2->5, 1->3

 

十分鐘嘗試

二叉樹的兩個殺手鐗,一個是遞迴,處理複雜的問題,一個是DFS和BFS的搭建的遍歷二叉樹的迭代程式碼結構,增加一個個性化邏輯處理二叉樹問題。很顯然這個問題可以用遞迴解決。有個問題一定要注意,遞迴呼叫的時候path不要寫+=,這樣會修改path的值,呼叫完左側,呼叫右側的時候結果不正確。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> list=new ArrayList();
        if(root==null) return list;
        String path="";
        searchPath(path,root,list);
        return list;
    }
    public void searchPath(String path,TreeNode node,List<String> res){
        if(node.left==null&&node.right==null){
            res.add(path+=node.val);
        }
        if(node.left!=null){
            //不要寫path加上等於,否則會修改path的值,右側會發生變化,這樣path一直為空
             searchPath(path+node.val+"->",node.left,res);
        }
        if(node.right!=null){
             searchPath(path+node.val+"->",node.right,res);
        }
       
        
        
    }
}