计算二叉树的深度和宽度
来源:互联网 发布:源系统数据质量报告 编辑:程序博客网 时间:2024/06/07 16:02
如何求解二叉树的深度,可以先分析一下下图:
在这个图中,根节点R的高度H1=max{左子节点高度H2,右子节点高度H3}+1;可以得出H1=H3+1;
而H2=max{H4,0}+1;H3=H5+1;
....;...
所以可以看出对高度的求解可以满足以下递归:
求得左子树的高度 LHeight;
求得右子树的高度RHeight;
根的高度为max(LHeight+1,RHeight;+1).
具体代码如下:
int GetHeightInfo(BiNode *head){int LHeight,RHeight;//边界条件if (head==NULL) return 0;//得到左子树的高度LHeight=GetHeightInfo(head->left);//得到右子树的高度RHeight=GetHeightInfo(head->right);//取左右子树高度的最大值+1return LHeight>RHeight? LHeight+1:RHeight+1;}二叉树的深度求解,也可以先分析啊下图:
求宽度本质上还是求各层的节点数,对宽度优先遍历算法稍微改进,可以得到各层的节点值,宽度优先算法需要队列,而层数的计算可以采用两个参数来维持:
上层的节点数LastLayerValue;本层的节点数CurrentLayerValue;这样就可以确定各层的节点数。
int GetWidthInfo(BiNode *head){//需要保存的三个数据int LastLayerValue;int CurrentLayerValue;int maxWidth=0;//维护队列queue<BiNode *> myQueue; if(head->data==NULL){return 0;}else {LastLayerValue=1;myQueue.push(head);}while(!myQueue.empty()){while(LastLayerValue!=0){head=myQueue.front();myQueue.pop();if(head->left!=NULL){myQueue.push(head->left);}if(head->right!=NULL){myQueue.push(head->right);}LastLayerValue--;}CurrentLayerValue=myQueue.size();LastLayerValue=CurrentLayerValue;maxWidth=maxWidth>CurrentLayerValue? maxWidth:CurrentLayerValue;}return maxWidth;}最后给出求解两者的函数:
/*Description 给定一个二叉树,获取该二叉树的宽度深度。Prototype int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)Input Param head 需要获取深度的二叉树头结点Output Param pulWidth 宽度 pulHeight 高度Return Value 0 成功 1 失败或其他异常*/int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight){/*在这里实现功能*/ *pulWidth=GetWidthInfo(&head);*pulHeight=GetHeightInfo(&head);return 0;}
0 0
- 计算二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的最大深度和宽度
- 二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 二叉树的深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的宽度和深度搜索
- 二叉树的深度和宽度
- 二叉树深度和宽度
- 二叉树宽度的计算
- Oracle优化之执行计划管理
- Oracle优化之表访问调优
- C++ 中各种map的使用
- Oracle优化之联结与子查询
- Effective C++——》条款18:让接口容易被正确使用,不容易被误用
- 计算二叉树的深度和宽度
- 路人甲的帮助——C指针的指针引发的错误
- 如何提高多线程程序的cptgju利用率
- JQuery learning notes.
- CreateThread 函数
- Common Subsequence
- 有n个整数,使前面各数顺序向后移动m个位置最后m个数变成最前面的m个数
- 开始写一个属于自己的类库SqlHelper
- ant学习笔记