数据结构实验六 树(二叉链表,统计结点总数及叶子结点数)

一、 实验目的
1. 熟悉二叉树的链式存储结构
2. 掌握二叉树的建立、深度优先递归遍历等算法
3. 能够利用遍历算法实现一些应用
二、 实验内容
1. 已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。

2. 采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。

//bitree.h
//本头文件包含binode类和二叉链表bitree类
#include<iostream>
using namespace std;

template<class T>
struct binode
{
    T data;     //存储数据
    binode<T> * lchild,* rchild; //左孩子,右孩子
};

template<class T>
class bitree
{
    private:
        binode<T> * root;  //指向根节点的头指针
        int allsum;//节点总数
        int yesum;//叶子节点总数
        int a;
        binode<T> * creat(binode<T> *bt);  //构造函数调用
        void release(binode<T> *bt);  //析构函数调用
        void preorder(binode<T> *bt); //前序遍历函数调用
        void inorder(binode<T> *bt);  //中序遍历函数调用
        void postorder(binode<T> *bt);//后序遍历函数调用
        void exchange(binode<T> *bt);//交换左右子树,实验五第一问
        int sum(binode<T> *bt);//节点总数,实验五第二问
        int ysum(binode<T> *bt);//叶子节点总数,实验五第二问
        int px(binode<T> *bt);
    public:
        bitree(){root=creat(root);}  //构造函数
        ~bitree(){release(root);}     //析构函数

        void preorder(){preorder(root);} //前序遍历函数
        void inorder(){inorder(root);}  //中序遍历函数
        void postorder(){postorder(root);} //后序遍
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值