【数据结构】二叉树的链式储存以及基本操作

#include <bits/stdc++.h>
#define MAXSIZI 10
/*
1、以二叉链表表示二叉树,建立一棵二叉树
2、输出二叉树的中序遍历结果
3、输出二叉树的前序遍历结果
4、输出二叉树的后序遍历结果
5、计算二叉树的深度
6、统计二叉树的结点个数
7、统计二叉树的叶结点个数;
*/
using namespace std;
//以二叉链表表示二叉树,建立一棵二叉树
typedef struct Node
{
    char  data;
    Node *lchild,*rchild;
}BiTNode,*BiTree;//*BiTree 指向结构体的指针
//先序递归建立二叉树
void CreatBiTree(BiTree &T){
    char c; cin >> c;
    if(c == '#')
       T = NULL;
    else{
        T = (BiTNode*)malloc(sizeof(BiTNode));
        T -> data = c;
        CreatBiTree(T-> lchild);
        CreatBiTree(T -> rchild);
    }
}
//中序遍历
void midGetData(BiTree T)
{
    if(T)
    {
        midGetData(T -> lchild);
        cout << T -> data;
        midGetData(T -> rchild);
    }
}
//后序遍历
void lastGetData(BiTree T)
{
    if(T)
    {
        midGetData(T -> lchild);
        midGetData(T -> rchild);
        cout << T -> data;
    }
}
//树的深度
int GetDepth(BiTree T)
{
    if(T == NULL)
        return 0;
    int m = GetDepth(T -> lchild);
    int n = GetDepth(T -> rchild);
    if(m > n)
        return m+1;
    return n+1;
}
//统计二叉树中结点的个数
int GetNodeCount(BiTree T)
{
    if(T == NULL)
        return 0;
    return GetNodeCount(T -> lchild) + GetNodeCount(T -> rchild) + 1;
}
//统计二叉树中叶结点的个数
int GetNodeCount_ye(BiTree T)
{
     if(T == NULL)
        return 0;
     //如果该节点没有左子树和右子树 则是叶节点
     if(T -> lchild==NULL&&T -> rchild==NULL)
     {
         return 1;
     }else{
        return GetNodeCount_ye(T -> lchild) + GetNodeCount_ye(T -> rchild);
     }
}

int main()
{
    BiTree  T;
    cout <<"先序遍历输入(以#结束):";
    CreatBiTree(T);
    cout <<"中序遍历结果:";
    midGetData(T);
    cout <<"\n后序遍历结果:";
    lastGetData(T);
    cout << endl;
    int Depth = GetDepth(T);
    cout << "树的深度为:" << Depth << endl;
    int TreeNodeCount = GetNodeCount(T);
    cout << "树的节点数为:" << TreeNodeCount << endl;
    cout << "树的叶子节点为:"<<GetNodeCount_ye(T)<<endl;

    return 0;
}

展开阅读全文

没有更多推荐了,返回首页