二叉树的中序遍历 - 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