二叉树深度和宽度
来源:互联网 发布:淘宝可以卖药品吗 编辑:程序博客网 时间:2024/06/05 14:07
二叉树的深度:
递归法:为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0。
二叉树的宽度:
每层结点总数的最大值。
//求二叉树的深度及宽度#include <iostream>#include <queue>using namespace std;struct BinaryTreeNode{ char value; BinaryTreeNode *left; BinaryTreeNode *right;};//新建二叉树void CreatTree(BinaryTreeNode *root){ char ch=0; cin>>ch; if('#'==ch) return; else { //新建一个结点 root=new BinaryTreeNode(); root->value=ch; CreatTree(root->left); CreatTree(root->right); }}//递归法求树深int TreeDepth(BinaryTreeNode *root){ if(root==NULL) return 0; int l=TreeDepth(root->left); int r=TreeDepth(root->right); return l>r?(l+1):(r+1);}//求树的宽度int TreeWidth(BinaryTreeNode *root){ if(root==NULL) return 0; int nwidth=1; int lastlevelwidth=0; int temlevelwidth=0; int curlevelwidth=0; queue<BinaryTreeNode *> myqueue; myqueue.push(root); lastlevelwidth=1; BinaryTreeNode *pcur=NULL; while(!myqueue.empty()) { temlevelwidth=lastlevelwidth; while(temlevelwidth!=0) { //遍历本层结点 pcur=myqueue.front(); myqueue.pop(); if(pcur->left!=NULL) myqueue.push(pcur->left); if(pcur->right!=NULL) myqueue.push(pcur->right); temlevelwidth--; } curlevelwidth=myqueue.size(); nwidth=nwidth>curlevelwidth?nwidth:curlevelwidth; lastlevelwidth=curlevelwidth; } return nwidth;}int main(){ //建立一个二叉树 BinaryTreeNode *root=NULL; CreatTree(root); cout<<"二叉树的深度为:"<<TreeDepth(root)<<endl; cout<<"二叉树的宽度为:"<<TreeWidth(root)<<endl; return 0;}
0 0
- 二叉树深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的最大深度和宽度
- 计算二叉树的深度和宽度
- 二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 二叉树的深度和宽度
- 二叉树学习笔记-深度和宽度
- 二叉树的宽度和深度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树的深度和宽度
- 求二叉树宽度和深度
- 二叉树的宽度和深度搜索
- 记一次实验室局域网的ARP欺骗
- ASP.NET Core 1.0: API的输入参数
- freemarker常见语法大全
- Android 开发中的消息机制 Handler 机制
- SDN启蒙3:openVswitch(OVS)源代码分析之简介
- 二叉树深度和宽度
- Impala Kerberos Sentry Doas
- Javascript中ECMAScript数组相关方法操作
- UI细节点滴-UIScorllView和UITableView/UITextView拖动退出键盘方法
- 全缓存,行缓存,无缓存
- caffe安装过程记载
- 【vijos P1190】繁忙的都市
- 深入理解Java虚拟机:JVM高级特性与最佳实践
- 特征选择常用算法综述