递归方式这里不做详细的介绍
递归代码:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<Integer>();
treaversal(root,list);
return list;
}
public void treaversal(TreeNode root,List list){
if(root==null){
return;
}
treaversal(root.left,list);
list.add(root.val);
treaversal(root.right,list);
}
}
非递归实现:
首先还是利用栈这种数据结构,中序遍历的逻辑顺序为左中右,首先判断迭代是否结束的标志是栈是否为空,如果节点元素的左节点不为空,则一直让左节点进栈,直到左节点为空为止,如果元素左节点为空之后则,让该节点出栈,让该节点的父亲节点出栈,然后让父亲节点的右节点进栈,重复以上过程。
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
if(root==null){
return list;
}
TreeNode cur = root;
while(!stack.isEmpty()|| cur!=null){
if(cur!=null){
stack.push(cur);
cur = cur.left;
}
else{
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
}
return list;
}
}