假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。 试设计一个算法,采用先序遍历方式求一棵给定二叉树b中的所有大于x 的结点个数

一、实验目的

假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。 试设计一个算法,采用先序遍历方式求一棵给定二叉树b中的所有大于x 的结点个数;并用相关数据进行测试。

二、实验内容

1. 实现一个二叉树的创建函数`CreateBTree`。

2. 实现二叉树的销毁函数`DestroyBTree`。

3. 编写先序遍历二叉树的函数`DispBTree`。

4. 实现计算二叉树高度的函数`BTHeight`。

5. 实现求二叉树结点总数的函数`NodeCount`。

6. 实现求二叉树叶子结点总数的函数`LeafCount`。

7. 编写求二叉树中所有大于x的结点个数的函数`GreaterNodes`。

8. 测试以上功能,验证结果的正确性。

三、实验过程

实现思路

创建二叉树:使用字符串输入构造二叉树,左括号表示进入左子树,右括号表示进入右子树,逗号分隔兄弟节点。

销毁二叉树:采用后序遍历方式释放二叉树内存。

先序遍历输出:按先序遍历顺序打印二叉树结构。

求二叉树高度:递归计算左右子树高度,返回较大者加一。

求结点总数:递归计算左右子树结点数并加上根结点。

求叶子结点总数:若当前结点为叶子结点(无左右孩子),则计数加一,否则递归计算左右子树的叶子结点数。

求大于x的结点个数:递归遍历二叉树,若当前结点值大于x,则计数加一,并继续递归左右子树。

#include "BTree.cpp"
int GreaterNodes(BTNode *b, char x)
{
    int num1, num2, num=0;
    if (b==NULL)
        return 0;
    else
     {   if (b-> data> x)num++;
        num1=GreaterNodes(b->lchild, x);
        num2=GreaterNodes(b->rchild,x);
        num+=num1+num2;
        return num;
    }
}
int main()
{
    BTNode *bt;
    CreateBTree(bt,"A(B(D,E(G,H)),C(,F(I)))");
    printf("bt: ");
    DispBTree(bt);
    printf("\n");
    char x;
    x='C';
    int n=GreaterNodes(bt, x);
    printf("bt 中大于%c的结点个数=%d\n",x,n);
    DestroyBTree(bt);
}

实验结果/运行图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值