数据结构中有关数的操作:递归遍历树,非递归遍历树,建树,复制树,求树的深度, 求节点数, 线索树, 带头结点的线索树, 遍历线索树,哈弗曼树及哈夫曼编码,交换左右子树,求叶子节点,求宽度(全是...

可能编译时会有些语法小错误(比如分号,->,等),很容易就自己纠正了哦,思路绝对是完全正确的,所以用的话就自己试着改改吧,直接复制粘贴,就正确,岂不是太没写代码体验了,自己改改才印象更加深刻的呢()~~~~;

递归遍历树

//遍历算法
#include<iostream>
using namespace std;
typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreratBiTree(BiTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiTree;
        T->data=ch;
        CreratBiTree(T->lchild);
        CreratBiTree(T->rchild)
    }
}

void InOderTraverserve(BiTree T){
    if(T){
        InOderTraverserve(T->lchild);
        cout<<T-data;
        InOderTraverserve(T->rchild);
    }
}

void main(){
    BiTree tree;
    cout<<"please input\n";
    CreratBiTree(tree);
    cout<<"middle result\n";
    CreratBiTree(tree);
    cout<<"front result\n";
    cout<<endl;
}

非递归遍历树

//非递归遍历二×树
#include<iostream>
using namespace std;
//二叉链存储
typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

//链栈
typedef struct StackNode{
    BiTNode data;
    struct StackNode *next;
}StackNode,*LinkStack;

void CreatBiTree(BiTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T==NULL;
    else{
        T=new BiTNode;
        T->data=ch;
        CreatBiTree(T->lchild);
        CreatBiTree(T->rchild);
    }
}

void InitStack(LinkStack &S)
{
    //构造一个空栈S,栈顶指针置空
    S=NULL;
}

void StackEmpty(LinkStack S){
    if(!S){
        return true;
    }else{
        return false;
    }
}

void Push(LinkStack &S,BiTree e){
    StackNode *p=new StackNode;
    p->data=*e;
    p->next=S;
    S=p;
}

void pop(LinkStack &S BiTree e){
    if(S!=NULL){
        *e=S->data;
        StackNode *p=S;
        S=S->next;
        delete p;
    }
}
//中序
void InOderTraversel1(BiTree T){
    LinkStack S;BiTree p;
    BiTree q=new BiTNode;
    InitStack(S); p=T;
    while(p||!StackEmpty(S)){
        if(p){
            push(S,p);
            p->lchild;
        }else{
            pop(S,p);
            cout<<q->data;
            p=q->rchild;
        }
    }
}

void main(){
    BiTree tree;
    cout<<"please input\n";
    CreatBiTree(tree);
    cout<<"result:\n";
    InOderTraversel1(tree);
    cout<<endl;
}

建树

//建树
#include<iostream>
using namespace std;
typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiTNode
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

void main(){
    BiTree tree;
    cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    cout<<"所建立的二叉链表中序序列:\n";
    InOrderTraverse(tree);
    cout<<endl;
}

复制树

#include<iostream>
using namespace std;

typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct StackNode{
    BiTNode data;
    struct StackNode *next;
}

void CreateBiTree(BiTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiTNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

void InitStack(LinkStack &S)
{
    //构造一个空栈S,栈顶指针置空
    S=NULL;
}

bool StackEmpty(LinkStack S)
{
    if(!S)
        return true;
    return false;
}

void Push(LinkStack &S,BiTree e)
{
    //在栈顶插入元素*e
    StackNode *p=new StackNode;
    p->data=*e;
    p->next=S;
    S=p;
}

void Pop(LinkStack &S,BiTree e)
{
    if(S!=NULL)//原书上写的是if(S==NULL)return ERROR;
    {   
        *e=S->data;
        StackNode *p=S;
        S=S->next;
        delete p;
    }
} 

void Copy(BiTree T,BiTree &newT){
    if(T==NULL){
        newT=NULL;
        return;
    }else{
        newT=new BiTNode;
        newT->data=T->data;
        Copy(t->lchild,newT->lchild);
        Copy(t->rchild,newT->rchild);
    }
}

void InOrderTraverse(BiTree T)
{  
    //中序遍历二叉树T的递归算法
    if(T){
        InOrderTraverse(T->lchild);
        cout << T->data;
        InOrderTraverse(T->rchild);
    }
}

void main()
{
    BiTree tree,new_tree;
    cout<<"请输入建立二叉树的序列:\n";
    CreateBiTree(tree);
    Copy(tree,new_tree);
    cout<<"复制得到的新树的中序序列:\n";
    InOrderTraverse(new_tree);
    cout<<endl;
}

求树的深度

#include<iostream>
using namespace std;

typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree &T){
    char ch;
    cin >> ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiTNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

int Depth(BiTree T){
    int m,n;
    if(T==NULL) retue 0;
    else{
        m=Depth(T->lchild);
        n=Depth(T->rchild);
        if(m>n) return(m+1);
        else{
            return (n+1);
        }
    }
}

void main(){
    BiTree tree;
    cout<<"please input:\n";
    CreateBiTree(tree);
    cout<<"deepth is:"<<Depth(tree)<<endl;
}

求节点数

#include<iostream>
using namespace std;

typedef struct BiNode{
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiTNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

int NodeCount(BiTree T){
    if(T==NULL) return 0;
    else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}

void main(){
    BiTree tree;
    cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    cout<<"结点个数为:"<<NodeCount(tree)<<endl;
}

中序线索化

//树的线索化中序
#include<iostream>
using namespace std;

typedef struct BiThrNode{
    char data;
    struct BiThrNode *lchild,*rchlild;
    int LTag,RTag;
}BiThrNode,*BiThrTree;

BiThrNode *pre = new BiThrNode;

void CreateBiTree(BiThrNode &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=new BiThrNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchlild);
    }
}

void InThreading(BiThrTree p){
    if(p){
        InThreading(p->lchild);
        if(!p->lchild){
            p->LTag=1;
            p->lchild=pre;
        }else{
            p->LTag;
        }

        if(!pre->rchlild){
            pre->RTag=1;
            pre->rchlild=p;
        }else{
            pre->RTag=0;
        }
        pre=p;
        InThreading(p->rchlild);
    }
}

void main(){
    pre->RTag=1;
    pre->rchlild=NULL;
    BiThrTree tree;
    cout<<"please input:\n";
    CreateBiTree(tree);
    InThreading(tree);
    cout<<"finish!\n";
}

带头结点的中序线索化

//带头结点的中序线索化
#include<iostream>
using namespace std;

typedef struct BiThrNode{
    char data;
    struct BiThrNode *lchild,*rchild;
    int LTag,RTag;
}BiThrNode,*BiThrTree;

BiThrNode *pre=new BiThrNode;

void CreateBiTree(BiThrTree &T){
    char ch;
    cin>>ch;
    if(ch=='#') T=NULL;
    else{
        T=newBiThrNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

void InThreading(BiThrTree p){
    if(p){
        InThreading(p->lchild);
        if(!p->lchild){
            p->LTag=1;
            p->lchild=pre;
        }else{
            p->LTag=0;
        }

        if(!pre->rchild){
            pre->RTag=1;
            pre->rchild=p;
        }else{
            pre->RTag=0;
        }
        pre=p;
        InThreading(p->rchild);
    }
}

void InOrderThreading(BiThrTree &Thrt,BiThrTree T){
    Thrt=new BiThrNode;
    Thrt->LTag=0;
    Thrt->RTag=1;
    Thrt->rchild=Thrt;
    if(!T) Thrt->lchild=Thrt;
    else{
        Thrt->lchild=T;pre=Thrt;
        InThreading(T);
        pre->rchild=Thrt;
        pre->RTag=1;
        Thrt->rchild=pre;
    }
}

void main(){
    pre->RTag=1;
    pre->rchild=NULL;
    BiThrTree tree,Thrt;
    cout<<"please:\n";
    CreateBiTree(tree);
    InThreading(Thrt,tree);
    cout<<"finish:\n";
}

遍历线索二叉树

//遍历线索二叉树
#include<iostream>
using namespace std;

typedef struct BiThrNode{
    char data;
    struct BiThrNode *lchild,*rchild;
    int LTag,RTag;
}BiThrNode,*BiThrTree;

BiThrNode *pre=new BiThrNode;

void CreateBiTree(BiThrTree &T){
    char ch;
    cin>>ch;
    if(ch='#') T=NULL;
    else{
        T=new BiThrNode;
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

void InTreading(BiThrTree p){
    if(p){
        InTreading(p->lchild);
        if(!p->lchild){
            p->LTag=1;
            p->lchild=pre;
        }else{
            p->LTag=0;
        }
        if(!pre->rchild){
            pre->RTag=1;
            pre->rchild=p;
        }else{
            pre->RTag=0;
        }
        pre=p;
        InTreading(p->rchild);
    }
}

void InOrderTreading(BiThrTree &Thrt,BiThrTree T){
    Thrt=new BiThrNode;
    Thrt->LTag=0;
    Thrt->RTag=1;
    Thrt->rchild=Thrt;
    if(!T){
        Thrt->lchild=Thrt;
    }else{
        Thrt->lchild=T;
        pre=Thrt;
        InTreading(T);
        pre->rchild=Thrt;
        pre->RTag=1;
        Thrt->rchild=pre;
    }

}

//start
void InOrderTraverse_Thr(BiThrTree T){
    BiThrTree p;
    p=T->lchild;
    while(p!=T){
        while(p->LTag==0){
          p=p->lchild;  
        }
        cout<<p->data;
        while(p->RTag==1&&p->rchild!=T){
            p=p->rchild;
            cout<<p-<data;
        }
        p=p->rchild;
    }
}

void main(){
    pre->RTag=1;
    pre->rchild=NULL;
    BiThrTree tree,Thrt;
    cout<,"please input:\n";
    CreateBiTree(tree);
    InOrderTreading(Thrt,tree);
    cout<<"result is:\n";
    InOrderTraverse_Thr(Thrt);
    cout<<endl;
}

构造哈夫曼树

//构造哈夫曼树
#include<iostream>
using namespace std;

typedef struct{
    int weight;
    int parent,lchild,rchild;
}HTNode,*HuffmanTree;

//选出最小的两个
void Select(HuffmanTree HT.int len,int &s1,int &s2){
    int i,min1=0x3f3f3f3f,min2=0x3f3f3f3f;
    for(i=1;i<=len;i++){
        if(HT[i].weight<min1&&HT[i].parent==0){
         min1=HT[i].weight;
         s1=i;   
        }
    }
    int temp=HT[s1].weight;
    HT[s1].weight=0x3f3f3f3f;
    for(i=1;i<=len;i++){
        if(HT[i].weight<min2&&HT[i].parent==0){
            min2=HT[i].weight;
            s2=i;
        }
    }
    HT[s1].weight=temp;
}

void CreateHuffmanTree(HuffmanTree &HT,int n){
    im,s1,s2,i;
    if(n<=1) return;
    m=2*n-1;
    HT=new HTNode[m+1];
    for(i=1;i<m;i++){
        HT[i].parent=0;
        HT[i].lchild=0;
        HT[i].rchild=0;
    } 
    cout<<"please input the weight of leaf child:\n";
    for(i=1;i<n;i++)
        cin>>HT[i]weight;
    for(i=n+1;i<=m;i++){
        Select(HT,i-1;s1,s2);
        HT[s1].parent=i;
        HT[s2].rchild=i;
        HT[i].lchild=s1;
        HT[i].rchild=s2;
        HT[i].weight=HT[s1].weight+HT[s2].weight;
    }
}

void main(){
    HuffmanTree HT;
    int n;
    cout<<"please input the num of leaf child:\n";
    cin>>n;
    CreateHuffmanTree(HT,n);
    cout<<"finish!\n";
}

根据赫夫曼树求赫夫曼编码

//根据赫夫曼树求赫夫曼编码
#include<iostream>
using namespace std;

typedef struct{
    int weight;
    int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;

void Select(HuffmanTree HT,int len,int&s1,int &s2){
    int i,min1=0x3f3f3f3f,min2=0x3f3f3f3f;
    for(i=1;i<len;i++){
        if(HT[i].weight<min1&&HT[i].parent==0){
            min1=HT[i].weight
            s1=i;
        }
    }
    int temp=HT[s1].weight
    HT[s1].weight=0x3f3f3f3f;
    for(i=1;i<=len;i++){
        if(HT[i].weight<min2&&HT[i]parent==0){
            min2=HT[i].weight;
            s2=i;
        }
    }
    HT[s1].weight=temp;
}

void CreateHuffmanTree(HuffmanTree &HT,int n){
    int m,s1,s2,i;
    if(n<=1) return;
    m=2*n-1;
    HT=new HTNode[m+1];
    for(i=1;i<m;++i){
        HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;
    }
    cout<<"please input the weigth of leaf child:\n";
    for(i=1;i<=n;++i){
        cin>>HT[i].weight;
    }
    for(i=m+1;i<=m;++i){
        Select(HT,i-1,s1,s2);
        HT[s1].parent=i;    
        HT[s2].parent=i;   
        HT[i].lchild=s1;   
        HT[i].rchild=s2 ;                           
        HT[i].weight=HT[s1].weight+HT[s2].weight; 
    }
}

void CreateHuffmanCode(HuffmanTree HT,HuffmanCode &HC,int n){
    int i,start,c,f;
    HC=new char*[n+1];
    char *cd=new char[n];
    cd[n-1]='\0';
    for(i-1;i<=n;++i){
        start=n-1;
        c=i;
        f=HT[i].parent;
        while(f!=0){
            --start;
            if(HT[f].lchild==c)
                cd[start]='0';
            else
                cd[start]='1';
            c=f;
            f=HT[f].parent;
        }
        HC[i]=new char[n-start];
        strcpy(HC[i],&cd[start]);
    }
    delete cd;
}

void show(HuffmanTree,HuffmanCode HC){
    for(int i=1;i<=sizeof(HC)+1;i++){
        cout<<HT[i].weight<<"result is:\n"<<HC[i]<<endl;
    }
}

void main(){
    HuffmanTree HT;
    HuffmanCode HC;
    int n;
    cout<<"please input the number of leaf child:\n";
    CreateHuffmanTree(HT,n);
    CreateHuffmanCode(HT,HC,n);
    show(HT,HC);
}

交换左右子树

//算法5.5 计算二叉树的深度,增加左右子数交换等功能
#include<iostream>
using namespace std;

//二叉树的二叉链表存储表示
typedef struct BiNode
{               
    char data;                      //结点数据域
    struct BiNode *lchild,*rchild;  //左右孩子指针
}BiTNode,*BiTree;

//用算法5.3建立二叉链表
void CreateBiTree(BiTree &T)
{   
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#')  T=NULL;            //递归结束,建空树
    else{                           
        T=new BiTNode;
        T->data=ch;                 //生成根结点
        CreateBiTree(T->lchild);    //递归创建左子树
        CreateBiTree(T->rchild);    //递归创建右子树
    }                               //else
}                                   //CreateBiTree

int Depth(BiTree T)
{ 
    int m,n;
    if(T == NULL ) return 0;        //如果是空树,深度为0,递归结束
    else 
    {                           
        m=Depth(T->lchild);         //递归计算左子树的深度记为m
        n=Depth(T->rchild);         //递归计算右子树的深度记为n
        if(m>n) return(m+1);        //二叉树的深度为m 与n的较大者加1
        else return (n+1);
    }
}
void InOrderTraverse(BiTree T){  
    //中序遍历二叉树T的递归算法
    if(T){
        InOrderTraverse(T->lchild);
        cout << T->data;
        InOrderTraverse(T->rchild);
    }
}
void inChangeLR(BiTree &T)
{
    BiTree temp;
    if(T){
        if(T->lchild==NULL&&T->rchild==NULL){
        return;
    } else{
        temp=T->lchild;
        T->lchild = T->rchild;
        T->rchild=temp;
    }
    inChangeLR(T->lchild);
    inChangeLR(T->rchild);
    }
}
void preChangeLR(BiTree &T)
{
BiTree temp;
    if(T){
        inChangeLR(T->lchild);
        if(T->lchild==NULL&&T->rchild==NULL){
        return;
    } else{
        temp=T->lchild;
        T->lchild = T->rchild;
        T->rchild=temp;
    }
    inChangeLR(T->rchild);
    }
}
void postChangeLR(BiTree &T)
{
BiTree temp;
    if(T){
        inChangeLR(T->lchild);
        inChangeLR(T->rchild);
        if(T->lchild==NULL&&T->rchild==NULL){
        return;
    } else{
        temp=T->lchild;
        T->lchild = T->rchild;
        T->rchild=temp;
    }
    
    }
}

int main()
{
    BiTree tree;
    cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);

    InOrderTraverse(tree);
    cout<<"数的深度为:"<<Depth(tree)<<endl;
    cout<<"中序遍历的结果为:\n";
    InOrderTraverse(tree);
    cout<<"\n";
    cout<<"交换后中序遍历的结果为:\n";
    inChangeLR(tree);
    InOrderTraverse(tree);
    cout<<"\n";
    cout<<"交换后前序序遍历的结果为:\n";
    preChangeLR(tree);
    InOrderTraverse(tree);
    cout<<"\n";
    cout<<"交换后后序遍历的结果为:\n";
    postChangeLR(tree);
    InOrderTraverse(tree);

    return 0; 
}

求叶子节点数目,求宽度,按层遍历

//中序遍历的递归与非递归算法
#include<iostream>
using namespace std;
#define MAXQSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef struct BiNode{              //二叉链表定义
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

/************************************* 队列 ***************************************/
typedef BiTree QElemType;

typedef struct{
    QElemType *base;//初始化时动态分配存储空间
    int front;//头指针
    int rear;//尾指针
    int last;
}SqQueue;

//算法3.13 循环队列的初始化
Status InitQueue(SqQueue &Q)
{ // 构造一个空队列Q
    Q.base = new QElemType[MAXQSIZE];
    if(!Q.base)
    {
        return OVERFLOW;    // 存储分配失败
    }
    Q.front = 0;
    Q.rear = 0;
    return OK;
}

//算法3.14 求循环队列的长度
int QueueLength(SqQueue Q)
{// 返回Q的元素个数,即队列的长度
    return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}

int QueueEmpty(SqQueue &Q)
{
    if (Q.front==Q.rear)   return OK;
    else return ERROR; 
}

//算法3.15 循环队列的入队
Status EnQueue(SqQueue &Q,QElemType e)
{// 插入元素e为Q的新的队尾元素
    if((Q.rear+1)%MAXQSIZE == Q.front)
    {
        return ERROR;//尾指针在循环意义上加1后等于头指针,表明队满
    }
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear+1)%MAXQSIZE;
    return OK;
}

//算法3.16 循环队列的出队
Status DeQueue(SqQueue &Q,QElemType &e)
{
    if(Q.rear == Q.front)
    {
        return ERROR;
    }
    e = Q.base[Q.front];
    Q.front = (Q.front+1)%MAXQSIZE;
    return OK;
}

BiTree GetHead(SqQueue Q)
{//返回Q的队列元素,不修改队头指针
    if(Q.front!=Q.rear)              //队列非空
        return Q.base[Q.front];      //返回队头元素的值,队头指针不变 
 }

/************************************************************************************/

//用算法5.3 先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T){   
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    cin >> ch;
    if(ch=='#')  T=NULL;            //递归结束,建空树
    else{                           
        T=new BiTNode;
        T->data=ch;                 //生成根结点
        CreateBiTree(T->lchild);    //递归创建左子树
        CreateBiTree(T->rchild);    //递归创建右子树
    }                               //else
}                                   //CreateBiTree

void InOrderTraverse(BiTree T){  
    //中序遍历二叉树T的递归算法
    if(T){
        InOrderTraverse(T->lchild);
        cout << T->data;
        InOrderTraverse(T->rchild);
    }
}

//实现按层遍历二叉树的非递归算法(队列)
void HierarchyTraverse(BiTree T)
{
    BiTree bt = T;
    SqQueue Q;
    InitQueue(Q);
    if(!bt){
        return;
    }
    EnQueue(Q,bt);
    while(Q.rear!=Q.front){
            DeQueue(Q,bt);
        cout<<bt->data;
        if(bt->lchild!=NULL){
            EnQueue(Q,bt->lchild);
        }
        if(bt->rchild!=NULL){
            EnQueue(Q,bt->rchild);
        }
    }
}
//统计二叉树中的叶子结点个数
int LeafNodeCount(BiTree T){
    if(T==NULL) return 0;
    else if(T->lchild==NULL&&T->rchild==NULL)
        return 1; 
    else 
        return LeafNodeCount(T->lchild)+LeafNodeCount(T->rchild);
} 
//-------------------
int Depth(BiTree T)
{ 
    int m,n;
    if(T == NULL ) return 0;        //如果是空树,深度为0,递归结束
    else 
    {                           
        m=Depth(T->lchild);         //递归计算左子树的深度记为m
        n=Depth(T->rchild);         //递归计算右子树的深度记为n
        if(m>n) return(m+1);        //二叉树的深度为m 与n的较大者加1
        else return (n+1);
    }
}
int LevelWidth(BiTree root,int level)//find the width of a level(amounts of nodes in the level).
{
    if(!root)return 0;
    else
    {
        if(level==1)return 1;
        level=LevelWidth(root->lchild,level-1)+LevelWidth(root->rchild,level-1);
    }
    return level;
}
int Width(BiTree root)//find the maximum width of the btree.
{
    int width,i;
    int w[20];
    for(i=0;i<20;i++)w[i]=0;
    if(!root)width=0;
    else
    {
        for(i=0;i<=Depth(root);i++)w[i]=LevelWidth(root,i+1);
    }
    i=0;
    while(w[i])
    {
        if(w[i]>width)width=w[i];
        i++;
    }
    return width;
}
// // -------------------
nt  main(){
    BiTree tree;
    cout<<"请输入建立二叉链表的序列:\n";
    CreateBiTree(tree);
    cout<<"中序遍历的结果为:\n";
    InOrderTraverse(tree);
    cout<<endl;
    //按层遍历二叉树
    cout<<"按层遍历的结果为:\n";
    HierarchyTraverse(tree);
    cout<<endl;
     cout<<"二叉树的宽度为"<<Width(tree)<<endl;
    //统计叶子结点树
    cout<<"叶子结点数为"<<LeafNodeCount(tree); 
    cout<<"\n";
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343