二叉树深度和宽度

来源:互联网 发布:淘宝可以卖药品吗 编辑:程序博客网 时间: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
原创粉丝点击