题目描述
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
递归解法
如题所说,递归算法十分简单。
class Solution {
List<Integer> list = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root == null)
return list;
inorderTraversal(root.left);
list.add(root.val);
inorderTraversal(root.right);
return list;
}
}
非递归
class Solution {
/*
* 先判断左子树,如果左子树一直不为空,则一直压栈
* 左子树为空,弹栈,判断右子树,如果有则压栈
*/
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
List<Integer> list = new ArrayList<>();
while(root != null || !stack.isEmpty()){
if(root != null){
stack.push(root);
root = root.left;
}
if(root == null){
TreeNode temp = stack.pop();
list.add(temp.val);
if(temp.right != null){
root = temp.right;
}
}
}
return list;
}
}