力扣94.二叉树的中序遍历(递归and迭代法)(java)
题目来源
94. 二叉树的中序遍历 - 力扣(LeetCode)
递归法
/*** 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;* }* }*/
class Solution {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);}
}
迭代法
代码分析
递归啥的不赘述了。迭代法就是模拟递归栈。
因为如果想要实现左中右的遍历效果(也就是中序遍历效果),就需要先找到最左边的,
但是找到最左边怎么回去呢?如果我在沿途找的时候,把过程中的结点存放起来,而栈最合适。
遍历结果就存放在动态数组中,(ArrayList)
代码
/*** 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;* }* }*/
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode curr = root;while(curr != null || !stack.isEmpty()) {//递归找最左边,入栈while(curr != null) {stack.push(curr);curr = curr.left;}// 回退, 出栈curr = stack.pop();res.add(curr.val);//遍历右边curr = curr.right;}return res;}
}