Binary Tree Paths:求所有根節點到葉子節點的二叉樹路徑
阿新 • • 發佈:2019-02-14
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"]
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
思路:這道題我想多了,我用的非遞迴雙棧模擬實現的,其實根本用不著,遞迴實現就行。
遞迴版:
public List<String> binaryTreePaths(TreeNode root) { List<String> answer = new ArrayList<String>(); if (root != null) searchBT(root, "", answer); return answer; } private void searchBT(TreeNode root, String path, List<String> answer) { if (root.left == null && root.right == null) answer.add(path + root.val); if (root.left != null) searchBT(root.left, path + root.val + "->", answer); if (root.right != null) searchBT(root.right, path + root.val + "->", answer); }
我的非遞迴:
/** * 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) { LinkedList<TreeNode> is = new LinkedList<TreeNode>();// 記錄元素 LinkedList<Character> cs = new LinkedList<Character>();// 記錄 L or R List<String> res = new ArrayList<String>(); TreeNode n = root; while (n != null || is.size() > 0) { while (n != null) { is.addLast(n); cs.addLast('L'); n = n.left; } TreeNode t = is.getLast(); char type = cs.getLast(); if (type == 'L') { cs.removeLast(); cs.add('R'); n = t.right; } else { if (t.left == null && t.right == null) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < is.size() - 1; i++) { sb.append(is.get(i).val + "->"); } sb.append(is.get(is.size() - 1).val); res.add(sb.toString()); } is.removeLast(); cs.removeLast(); n = null; } } return res; } }
我發現我做簡單題目和中等難度題目用時居然是一樣的,憂傷啊......