求二叉树的高度

这里计算二叉树的高度采用三种不同的算法。
算法一:后序遍历二叉树,结点最大栈长即为二叉树的高度;
算法二:层次遍历二叉树,最大层次即为二叉树的高度;
算法三:采用递归算法,求二叉树的高度。
//法1:后序遍历,结点最大栈长即为树的高度
//法2:层次遍历,层次即为高度
//法3:递归算法求树高

#include<iostream> 
#include<stack> 
#include<queue> 
using namespace std; 
typedef struct BiTNode{ 
    char data; 
    struct BiTNode *lchild,*rchild; 
}BiTNode,*BiTree; 

void CreateTree(BiTree &T) 
{ 
    char ch; 
    cin>>ch; 
    if(ch=='#') 
        T=NULL; 
    else 
    { 
        T=(BiTree)malloc(sizeof(BiTNode)); 
        if(!T)  
            cout<<"生成结点错误!"<<endl; 
        T->data=ch; 
        CreateTree(T->lchild); 
        CreateTree(T->rchild); 
    } 
} 
  • 后序遍历
//法1:后序遍历,结点最大栈长即为树的高度 
int BT_high(BiTree T) 
{ 
    BiTree p=T,r=NULL; 
    int max=0;                                     //树高 
    stack<BiTree> s; 
    while(p||!s.empty()) 
    { 
        if(p!=NULL) 
        { 
            s.push(p); 
            p=p->lchild; 
        } 
        else 
        { 
            p=s.top(); 
            if(p->rchild!=NULL && p->rchild!=r) 
                p=p->rchild; 
            else 
            { 
                if(s.size()>max) max=s.size();//最大层次即为高度 
                r=p; 
                s.pop(); 
                p=NULL; 
            } 
        } 
    } 
    return max; 
} 
  • 层次遍历
//法2:层次遍历,层次即为高度 
int BT_level_depth(BiTree T) 
{ 
    if(!T)  return 0; 
    BiTree p=T,Q[100]; 
    int front=-1,rear=-1,last=0,level=0; 
    Q[++rear]=p; 
    while(front<rear) 
    { 
        p=Q[++front]; 
        if(p->lchild) 
            Q[++rear]=p->lchild; 
        if(p->rchild) 
            Q[++rear]=p->rchild; 
        if(front==last) 
        { 
            last=rear; 
            level++;               //层次+1 
        } 
    } 
    return level; 
} 
  • //法3:递归求树高
int Height (BiTree T) 
{   
    if(T==NULL) 
        return 0; 
    int m = Height ( T->lchild ); 
    int n = Height(T->rchild); 
    return (m > n) ? (m+1) : (n+1);   
} 
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页