从树的遍历理解递归

从树的遍历理解递归

void firstTra(Tree *T){
if(T){
cout<<T->data;
firstTra(T->leftTree);
firstTra(T->rightTree);
}
}

从树的遍历理解递归
在这里插入图片描述!!在这里插入图片描述

首先我们应该了解程序的执行是逐句的,也就是说当上一条语句运行结束后才会执行下一条语句。
递归:我们可以将它拆分为两个字单独来看:
递:向下传递;归:往回运行
在对树的遍历中,使用语句简洁的递归算法(先序遍历):当当前结点不为空时,调用该函数对其左子节点进行遍历,如果仍不为空,则继续调用,一直到所访问的结点为空,即一直到firstTra(D->leftTree)。(这里可以理解为向下传递也就是递归的“递”)即如图所示。
当D->leftTree为NULL时,返回第四步然后执行第四步的剩下的语句,当第四步end后,返回第三步,当第三步执行完成后,也就是第二步的firstTra()执行完毕。然后执行第二步后面的语句。最后返回第一步。执行后面的语句。这里可以理解为“归”)。
这样对递归的理解就比较容易了。