二叉树的中序遍历 - lovemoganna/DataStructure GitHub Wiki

InOrderRecur


public void inOrderRecur(Node head){
  if(head == null){
    return; 
  }
  inOrderRecur(head.left);//先遍历左子树
   sysout(head.value);//打印头结点
   inOrderRecur(head.right);//再遍历右子树
}
 需要准备的东西:申请一个栈stack,申请一个变量cur,初始时令cur=head
 规则:
  1.先把cur节点压入栈中,对以cur节点为头的整棵子树来说,
    依次把整棵树的左边界压入栈中,即不断令cur=cur.left,不断重复步骤1
  2.一直到发现cur=null.此时从stack中弹出node.
    打印此node的值,并让cur=node.right,重复步骤1.
  3.当stack=null并且cur=null时,整个过程结束
 cur始终记录着刚压入栈中的节点.
初始树:
   	    1
          /   \
         2     3
        / \   / \   
       4  5   6  7 
      / \ / \
 null nullnull  null

cur=1,将node1压入栈
cur=cur.left=2,将node2压入栈
cur=cur.left=4,将node4压入栈
cur=cur.left=null,将node4弹出
cur=cur.right=null,将node2弹出
                                 现在栈中只剩下node1了
cur=cur.right=node5,将node5压入栈中 
cur=cur.left=null,弹出node5
cur=cur.right=null,弹出node1

此时cur来到node3,将node3压入栈中
cur=cur.left=node6,将node6压入栈中,
cur=cur.left=null,弹出node6,
cur=cur.right=null,弹出ndoe3,

cur跑到node7上面,cur=node7
cur=cur.left=null,弹出node7,
cur=cur.left=null,此时stack=null,遍历结束
所以中序遍历的结果为:4 2 5 1 6 3 7