題目連接ide
題目大意:中序遍歷二叉樹。先序見144,後序見145。spa
法一:DFS,沒啥說的,就是模板DFS。代碼以下(耗時1ms):code
1 public List<Integer> inorderTraversal(TreeNode root) { 2 List<Integer> res = new ArrayList<Integer>(); 3 dfs(res, root); 4 return res; 5 } 6 private void dfs(List<Integer> res, TreeNode root) { 7 if(root != null) { 8 dfs(res, root.left); 9 res.add(root.val); 10 dfs(res, root.right); 11 } 12 }
法二:非遞歸。與先序相似。代碼以下(耗時2ms):blog
1 public List<Integer> inorderTraversal(TreeNode root) { 2 Stack<TreeNode> s = new Stack<TreeNode>(); 3 List<Integer> res = new ArrayList<Integer>(); 4 TreeNode tmp = root; 5 while(!s.isEmpty() || tmp != null) { 6 //壓入左孩子結點 7 while(tmp != null) { 8 s.push(tmp); 9 tmp = tmp.left; 10 } 11 //若是棧非空,彈出頂結點,遍歷右子樹 12 if(!s.isEmpty()) { 13 tmp = s.pop(); 14 res.add(tmp.val); 15 tmp = tmp.right; 16 } 17 } 18 return res; 19 }