建立一个简易的二叉树,如图
先序遍历代码:
//先序遍历的意义:根->左->右
void preorderTraverse(Tree T)
{
if(T==NULL)
return 0;
printf("%c",T->data);
preorderTraverse(Tree T->lchild);
preorderTraverse(Tree T->rchild);
}
进入主题,用栈理解递归。
打印A->data后,遍历A为根的树的左孩子(B),A为根的树入栈,
打印B->data后,遍历B为根的树的左孩子(D),B为根的树入栈,
打印D->data后,遍历D为根的树的左孩子(NULL),D为根的树入栈,
遍历D为根的树的右孩子(NULL)
________________________________
D为根的树出栈,
遍历B为根的树的右孩子(E),打印E->data后,B为根的出栈,
遍历E为根的树的左孩子(NULL),E为根的树入栈,
遍历E为根的树的右孩子(NULL),E为根的树出栈,
遍历A为根的树的右孩子(C),打印C->data后,A为根的树出栈,
——————————————————————————————
遍历C为根的树的左孩子(F),C为根的树入栈,
打印F->data后,遍历F为根的树的左孩子(NULL),F为根的树入栈,
遍历F为根的树的右孩子(NULL),
——————————————————————————————
F为根的树出栈,
遍历C为根的树的右孩子(G),C为根的树出栈,
打印G->data后,遍历G为根的树的左孩子(NULL),G为根的树入栈,
遍历G为根的树的右孩子(NULL),
——————————————————————————————
G为根的树出栈。