文章目录
- 1. 描述
- 2. 分析
- 2.1 递归方法
- 2.2 迭代
- 3. 解答
- 3.1 递归
- 3.2 迭代
1. 描述
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
2. 分析
2.1 递归方法
中序遍历就是左-根-右顺序遍历。然后每个子树都要进行递归调用。
2.2 迭代
递归调用是维护了一个隐式的栈的,迭代就是自己显式维护这个栈。
3. 解答
3.1 递归
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
public class Soultion {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();inorder(root, res);return res;} private void inorder(TreeNode root, List<Integer> res) {if (root == null) {return;}inorder(root.left, res);res.add(root.val);inorder(root.right, res);}
}
3.2 迭代
public List<Integer> inorderTraversal(TreeNode root) {//迭代方法List<Integer> res = new ArrayList<>();Deque<TreeNode> stack = new LinkedList<>();while(root != null || !stack.isEmpty()) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();res.add(root.val);root = root.right;}return res;}