LeetCode刷題Easy篇Binary Tree Paths
阿新 • • 發佈:2018-12-20
題目
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); } } }