Given a binary tree, return all root-to-leaf paths.
時間 O(b^(h+1)-1) 空間 O(h) 遞歸棧空間 對於二叉樹b=2java
簡單的二叉樹遍歷,遍歷的過程當中記錄以前的路徑,一旦遍歷到葉子節點便將該路徑加入結果中。node
public class Solution { List<String> res = new ArrayList<String>(); public List<String> binaryTreePaths(TreeNode root) { if(root != null) findPaths(root,String.valueOf(root.val)); return res; } private void findPaths(TreeNode n, String path){ if(n.left == null && n.right == null) res.add(path); if(n.left != null) findPaths(n.left, path+"->"+n.left.val); if(n.right != null) findPaths(n.right, path+"->"+n.right.val); } }
2018/2python
class Solution: def binaryTreePaths(self, root): """ :type root: TreeNode :rtype: List[str] """ result = [] if root is None: return result self.findPaths(root, [], result) return result def findPaths(self, node, path, result): path.append(str(node.val)) if node.left is not None: self.findPaths(node.left, path, result) if node.right is not None: self.findPaths(node.right, path, result) if node.left is None and node.right is None: result.append("->".join(path)) path.pop()
給定一棵二叉樹的根節點和兩個任意節點,返回這兩個節點之間的最短路徑
時間 O(h) 空間 O(h) 遞歸棧空間segmentfault
兩個節點之間的最短路徑必定會通過兩個節點的最小公共祖先,因此咱們能夠用LCA的解法。不一樣於LCA的是,咱們返回不僅是標記,而要返回從目標結點遞歸回當前節點的路徑。當遇到最小公共祖先的時候便合併路徑。須要注意的是,咱們要單獨處理目標節點自身是最小公共祖先的狀況。app
public LinkedList<TreeNode> helper(TreeNode n, TreeNode p, TreeNode q){ if(n == null){ return null; } LinkedList<TreeNode> left = helper(n.left, p, q); LinkedList<TreeNode> right = helper(n.right, p, q); // 當左右都爲空時 if(left == null && right == null){ // 若是當前節點是目標節點,開啓一條新路徑 if(n == p || n == q){ LinkedList l = new LinkedList<TreeNode>(); l.add(n); return l; } else { // 不然標記爲空 return null; } // 若是左右節點都不爲空,說明是最小公共祖先節點,合併兩條路徑 } else if(left != null && right != null){ finalPath.addAll(left); finalPath.add(n); Collections.reverse(right); finalPath.addAll(right); return left; // 若是當前節點是目標結點,且某一個子樹不爲空時,說明最小公共祖先是節點自身 } else if (left != null){ left.add(n); if(n == p || n == q){ finalPath.addAll(left); } return left; } else { right.add(n); if(n == p || n == q){ finalPath.addAll(right); } return right; } }