一、前序、中序、后序遍历
- 如图:如果是前序遍历,则按照根->左->右的顺序遍历,即1 2 3
- 如果是中序遍历,则按照左->根->右的顺序遍历,即 1 3 2
- 如果是后序遍历,则按照左->右->根的顺序遍历,即 3 2 1
二、代码实现(以中序遍历为例)
- 方法一:递归
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); fun(res,root); return res; } void fun(List<Integer> res, TreeNode root) { if(root==null) { return; } //按照 左-打印-右的方式遍历 fun(res,root.left); res.add(root.val); fun(res,root.right); } }
递归无疑是最简单的方法
- 方法二:迭代
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); Deque<TreeNode> st = new LinkedList<TreeNode>(); while (root != null || !stk.isEmpty()) { //先把左节点遍历 while (root != null) { st.push(root); root = root.left; } root = st.pop(); res.add(root.val); root = root.right; } return res; } }