二叉树的创建,遍历,查找,求高度(递归)

#include<iostream>
using namespace std;
  typedef  class student
        {
            public :
            student *left;
            student *right;
            char scores;
        }*Btree,tree;
    void pre_printlist(Btree L);//前序遍历
    int  length_tree(Btree L);//求树的高度
    void init_tree(Btree &L);//初始化树
    void creat_tree(Btree &L);//创造二叉树,前序创造
    Btree search_tree(Btree &L,char e);//查找树的节点

    int main()
        {
            char ch;
            Btree trees;
            init_tree(trees);
            creat_tree(trees);
            cout<<endl;
            pre_printlist(trees);
            int lenght=length_tree(trees);
            cout<<"这棵树的高度是"<<lenght<<endl;
            cout<<"您要查找的节点数据是?"<<endl;
            cin>>ch;
            Btree p=search_tree(trees,ch);
            if(p==NULL)
            {
                cout<<"查找失败"<<endl;
            }
            else
            {
                cout<<"查找成功,这个值是"<<p->scores<<endl;
            }
            return 0;
        }


    void init_tree(Btree &L)
        {
            L=NULL;
        }

    Btree search_tree(Btree &L,char e)
        {
            Btree p;
            if(L==NULL)
            {
                return NULL;
            }

            else if(L->scores==e)
            {
                return L;
            }

            else

            {
                p=search_tree(L->left,e);
                if(p!=NULL)//ур╣╫ак
                {
                    return p;
                }

                else
                {
                    return search_tree(L->right,e);
                }
            }

        }


    int  length_tree(Btree L)
        {
            int len1,len2;
            if(L==NULL)
            {
                return 0;
            }

            else
            {
              len1=length_tree(L->left);
              len2=length_tree(L->right);
            }
            return len1 > len2 ? (len1+1) : (len2+1);
        }


       void creat_tree(Btree &L)
        {
            char ch;
            cout<<"请输入一个字符,输入0表示不创建,其他表示创建"<<endl;
            cin>>ch;
            if(ch=='0')
            {
                L=NULL;
                return ;
            }

            else
            {
                L=new tree;
                L->scores=ch;
                creat_tree(L->left);
                creat_tree(L->right);
            }
        }

    void pre_printlist(Btree L)
        {
            if(L!=NULL)
            {
                cout<<L->scores<<" ";
                pre_printlist(L->left);
                pre_printlist(L->right);
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值