6-21 数据结构考题 - 中序遍历二叉树87

以二叉链表作存储结构,建立一棵二叉树。 输出该二叉树的中序遍历序列,求出该二叉树的深度,并统计其叶子结点数。

二叉链表的类型描述

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

下面给出了 二叉树遍历 函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。

请先将以下代码中画横线的部分补充完整,然后将完整的函数InOrder,CountLeaf,Depth 提交系统,完成题目要求的功能。

函数接口定义:

void InOrder(BiTree T)

    if (T) 
    {         
        InOrder( ____ );  
        cout<< ____ ;  
        InOrder( ____ ); 
    }
}

// 统计叶子节点数
// 叶子节点个数通过参数 n 返回
void CountLeaf(BiTree T, int &n)

    if (T) 
    { 
        if ( ____ )   n++;
        CountLeaf( ____ , n);
        CountLeaf( ____ , n);
    }
}

// 计算二叉树高度
// 高度通过 dep 返回
void Depth(BiTree T, int &dep)

    int  dl,dr;
    if ( ____ )  dep=0;
    else 
    { 
        Depth( ____ , ____ );         
        Depth( ____ , ____ );
        dep=dl>dr? ____ : ____;
    }
}

测试主程序样例:

int main()

  BiTree T;  int n=0,dep;
  CreateBiTree(T);
  cout<<"InOrder:";  InOrder(T);  cout<   Depth(T,dep);  cout<<"Depth:"<   CountLeaf(T,n);  cout<<"Leaf:"<   return 0;
}

输入格式:

输入一个二叉树的先序序列,孩子为空的位置以#替代。

输出格式:

输出分3行

第一行 中序遍历序列

第二行 二叉树深度

第三行 叶子结点数

其中遍历过程中按访问顺序打印出结点的内容时,字符间均无间隔。 具体格式参看输出样例。

对于下图中给出的二叉树:

6-21 数据结构考题 - 中序遍历二叉树87_第1张图片

输入样例:

ABD##FE###CG#H##I##

输出样例:

InOrder:DBEFAGHCI
Depth:4
Leaf:4

void InOrder(BiTree T)
{
    if (T!=NULL)
    {
        InOrder(T->lchild);
        cout << T->data;
        InOrder(T->rchild);
    }
}

// 统计叶子节点数
// 叶子节点个数通过参数 n 返回
void CountLeaf(BiTree T, int &n)

    if (T) 
    { 
        if (T->lchild == NULL && T->rchild == NULL)   n++; // 如果当前节点是叶子节点,增加叶子节点计数
        CountLeaf(T->lchild, n); // 递归统计左子树中的叶子节点
        CountLeaf(T->rchild, n); // 递归统计右子树中的叶子节点
    }
}

// 计算二叉树高度
// 高度通过 dep 返回
void Depth(BiTree T, int &dep)

    int dl, dr;
    if (T == NULL)  dep = 0; // 如果当前节点为空,高度为0
    else 
    { 
        Depth(T->lchild, dl); // 递归计算左子树的高度
        Depth(T->rchild, dr); // 递归计算右子树的高度
     dep = dl > dr ? dl + 1 : dr + 1;// 高度为左右子树中较大者加1
    }
}

你可能感兴趣的:(数据结构,算法)