递归到D结点之后,D就是根节点,两边的空指针就是左右孩子,先进入左孩子,因为是空指针,所以返回到D,再进行右孩子的访问,右孩子也是个空指针,那么也返回到D,D的所有子孙都访问完之后返回B, 然后又要访问B的右边的子孙(也是右树)。 那么顺序就是:A->B->D->NULL->NULL-> E->G->NULL->NULL->NULL->C->F->H->
}//递归求树的高度intCalculateTreeDepth(BinaryNode* root){if(root ==NULL) {return0; }//深度初始化为0intdepth =0;//分别求左右子树的深度intLeftDepth = CalculateTreeDepth(root->lchild);intRightDepth = CalculateTreeDepth(root->rchild);//取二者中最大值,并加1(本层高度)depth = LeftDepth > ...
这学期的线下C语言课程,大一学生学完递归后,为了加深对递归的理解,布置了一次分形图片生成实验的PBL。这次,介绍同学们实现的毕达哥拉斯树。以下提供了分步骤的实现思路、代码,大家可以参考。 首先是同学们调研的目标效果: 毕达哥拉斯树是由毕达哥拉斯根据勾股定理所画出来的一个可以无限重复的图形。又因为重复数次后...
递归树 #include<rturtle.h> void tree(int branch){ if(branch>5){ fd(branch); rt(20); tree(branch-15); //递归 lt(40); tree(branch-10); //递归 rt(20); bk(branch); } } int main(){ //初始设置部分 initWorld(800,600); setPenSize(2); setPenColor(GREEN); setSpeed(800); /...
貌似用的是递归 1) p!=null 2) 1 3) 1 + height(p->lchild) 4) 1 5)1 + height(p->rchild) 6)lh 7)rh 8)0 结果一 题目 请填空完成下面求二叉树高度的类C算法。[说明]二叉链表的两个指针域为lchild与rchild, 算法中p为二叉树的根,lh和rh分别为以p为根的二叉树的左子树和右子树的高,hi为...
通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项. 2)实验内容 实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。注意:在非递归算法...
C语言实现二叉树的基本操作 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中,咱们详细介绍了二叉树的三种遍历算法以及算法的递归与非递归之间的转换。在今天的内容中我们将会继续介绍二叉树的一些基本操作如二叉树的层次遍历、求二叉树的深度、求二叉树的结点总数、求二叉树第K层的结点数、求二叉树的叶结点数...
一.递归查找二叉树节点 写法一. Node *find(Node *node,charch) {if(node==NULL)returnNULL;elseif(node->data==ch)returnnode;else{ Node*p=find(node->left,ch);if(p)returnp;elsereturnfind(node->right, ch); } } 写法二. Node *find_node(Node *node,intch) ...
后序遍历二叉树,最常用的实现方式就是递归。对于顺序表存储的二叉树,递归实现后序遍历的 C 语言程序为:void PostOrderTraverse(BiTree T, int p) { if ((p * 2 + 1 < NODENUM) && (T[p * 2 + 1] != 0)) { PostOrderTraverse(T, 2 * p + 1); } if ((p * 2 + 2 <...