一、题目要求
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
二、递归解法
2.1 初步思想
中序遍历左中右,因此入队在中间。
2.2 代码实现
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
midTraversal(list,root);
return list;
}
public void midTraversal(List<Integer> l,TreeNode root) {
if(root == null)return;
midTraversal(l,root.left);
l.add(root.val);
midTraversal(l,root.right);
}
}
2.3 运行结果
三、堆栈解法
3.1 算法思想
创建一个栈,一路向左子树遍历并入栈直到为空。弹出栈的元素无左儿子,加入队列随后去其右侧重复之前过程。右侧处理完之后处理上一层的根节点。
3.2 代码实现
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
Deque<TreeNode> stack = new LinkedList();
while(root != null || !stack.isEmpty()) {
while(root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
list.add(root.val);
root = root.right;
}
return list;
}
}