给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
递归:
public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) {
return new ArrayList();
}
List<Integer> resultList = new ArrayList<>();
resultList.addAll(inorderTraversal(root.left));
resultList.add(root.val);
resultList.addAll(inorderTraversal(root.right));
return resultList;
}
迭代:
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
List<Integer> list = new ArrayList<>();
while(true){
if (root != null){
stack.push(root);
root = root.left;
} else {
if (stack.empty()) {
return list;
}
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
}