如何将二叉树的形象理解与计算深度结合,巧妙运用递归思想?
- 内容介绍
- 相关推荐
本文共计423个文字,预计阅读时间需要2分钟。
从二叉树的深度递归函数中,使用debug调试更深入地理解程序的运行过程。
函数:int BTNodeDepth(BTNode *b)功能:求二叉树b的深度
递归过程:
1.初始化深度为0
2.如果b为空,返回当前深度
3.分别递归计算左子树和右子树的深度
4.取左右子树深度的较大值,加1后返回
从求二叉树的深度的递归函数中,使用debug调试更深刻的理解程序的运行过程。 int BTNodeDepth(BTNode *b) //求二叉树b的深度 { int lchilddep = 0 ,rchilddep = 0; if (b==NULL) return(0); //空树的高度为0 else { lchilddep = BTNodeDepth(b->lchild); //求左子树的高度为lchildde rchilddep = BTNodeDepth(b->rchild); //求右子树的高度为rchilddep return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1); } }
例如这里使用完函数后再return时,会将return 中的值赋值给lchilddep或lchilddep。 在debug中看到的现象时会回到这个函数(debug箭头指向这个函数,执行的是赋值操作) 在去执行下一个函数。 这里 = 号是得到上一个return里的值。
递归函数变量赋初值问题,为什么不加static?,每次int lchilddep = 0 ,rchilddep = 0;都是新的变量(相当于调用新的函数)创建新的空间这里的被赋值的地方都是上一个return返回的,所以不加。
二这里递归都是反哺上去的值。
对递归有了图表化的认识,想象成二叉树排布的房间,只有一个返回则想象成每一层都只有一个节点的树,两个以上则想象成多叉树。
本文共计423个文字,预计阅读时间需要2分钟。
从二叉树的深度递归函数中,使用debug调试更深入地理解程序的运行过程。
函数:int BTNodeDepth(BTNode *b)功能:求二叉树b的深度
递归过程:
1.初始化深度为0
2.如果b为空,返回当前深度
3.分别递归计算左子树和右子树的深度
4.取左右子树深度的较大值,加1后返回
从求二叉树的深度的递归函数中,使用debug调试更深刻的理解程序的运行过程。 int BTNodeDepth(BTNode *b) //求二叉树b的深度 { int lchilddep = 0 ,rchilddep = 0; if (b==NULL) return(0); //空树的高度为0 else { lchilddep = BTNodeDepth(b->lchild); //求左子树的高度为lchildde rchilddep = BTNodeDepth(b->rchild); //求右子树的高度为rchilddep return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1); } }
例如这里使用完函数后再return时,会将return 中的值赋值给lchilddep或lchilddep。 在debug中看到的现象时会回到这个函数(debug箭头指向这个函数,执行的是赋值操作) 在去执行下一个函数。 这里 = 号是得到上一个return里的值。
递归函数变量赋初值问题,为什么不加static?,每次int lchilddep = 0 ,rchilddep = 0;都是新的变量(相当于调用新的函数)创建新的空间这里的被赋值的地方都是上一个return返回的,所以不加。
二这里递归都是反哺上去的值。
对递归有了图表化的认识,想象成二叉树排布的房间,只有一个返回则想象成每一层都只有一个节点的树,两个以上则想象成多叉树。

