Given the root
of a binary tree, return the inorder traversal of its nodes’ values.
Example 1:

1 2
| Input: root = [1,null,2,3] Output: [1,3,2]
|
Example 2:
1 2
| Input: root = [] Output: []
|
Example 3:
1 2
| Input: root = [1] Output: [1]
|
Example 4:

1 2
| Input: root = [1,2] Output: [2,1]
|
Example 5:

1 2
| Input: root = [1,null,2] Output: [1,2]
|
Constraints:
- The number of nodes in the tree is in the range
[0, 100]
.
-100 <= Node.val <= 100
Follow up:
Recursive solution is trivial, could you do it iteratively?
1 递归
记得之前看到过这个非递归解法, 但是实在想不出来了😭😭
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); inorderTraversal(ans, root); return ans; } private void inorderTraversal(List<Integer> ans, TreeNode root) { if(root == null) return; else { inorderTraversal(ans, root.left); ans.add(root.val); inorderTraversal(ans, root.right); } } }
|
2 非递归
具体方法还是看代码吧. 感觉很难描述.
当初看解析的时候也看了半天才懂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution { public List<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stk = new Stack<>(); List<Integer> inorder = new ArrayList<>(); TreeNode p = root; while(p != null || !stk.isEmpty()) { while(p != null) { stk.push(p); p = p.left; } p = stk.pop(); inorder.add(p.val); p = p.right; } return inorder; } }
|