以二叉树的前序遍历为例,用栈来理解递归。

建立一个简易的二叉树,如图

先序遍历代码:

//先序遍历的意义:根->左->右
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为根的树出栈。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值