题目:中序遍历二叉树
解析:
1.递归遍历
public List<Integer> inorderTraversal1(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root == null) return list;
inOrder1(root,list);
return list;
}
public void inOrder1(TreeNode root,List<Integer> list){
if (root!= null){
inOrder1(root.left,list);
list.add(root.val);
inOrder1(root.right,list);
}
}
2.非递归遍历
①从根节点1开始将左子树压入栈(右边为栈顶)中,即1 2 4 8;
②栈中弹出结点8,将其存入list中,判断结点8是否有右孩子,如果有则将右孩子压入栈中。没有不做操作。此时栈中数据为 1 2 4,list中数据为8;
③栈中弹出结点4,将其存入list中,判断结点4是否有右孩子,如果有则将右孩子9压入栈中。此时栈中数据为1 2 9,list中数据为8 4;
…
========>规律为:从第二