• 二叉树的基本操作


    /*
     * @Issue: 二叉树的创建,遍历,删除
     * @Author: 一届书生
     * @LastEditTime: 2020-02-22 15:16:22
     */
    #include<iostream>
    using namespace std;
    
    // 定义树的基本结构
    typedef struct CSNode{
        char data;
        CSNode *left,*right;
    }TNode,*Tree;
    
    
    // 构造二叉树   [先序遍历输入的方法]
    void CreateTree(Tree &t){
        char c;
        cin>>c;
        if(c=='#')t=NULL;  
        else{
            t=new TNode;
            t->data=c;
            CreateTree(t->left);
            CreateTree(t->right);
        }
    }
    
    //先序遍历[递归]
    void PreOrderTraverse(Tree T)
    {
        if(T)
        {
            cout<<T->data;
            PreOrderTraverse(T->left);
            PreOrderTraverse(T->right);
        }
    }
    
    //中序遍历[递归]
    void InOrderTraverse(Tree T)
    {
        if(T)
        {
            InOrderTraverse(T->left);
            cout<<T->data;
            InOrderTraverse(T->right);
        }
    }
    
    //后序遍历[递归]
    void PostOrderTraverse(Tree T)
    {
        if(T)
        {
            PostOrderTraverse(T->left);
            PostOrderTraverse(T->right);
            cout<<T->data;
        }
    }
    
    // 求二叉树的深度[递归]
    int getDepth(Tree t){
        if(t==NULL)
            return 0;
        else{
            int m=getDepth(t->left);
            int n=getDepth(t->right);
            return m>n?m+1:n+1;
        }
    }
    
    // 统计二叉树中结点的个数[递归]
    int getNodenum(Tree t){
        if(t==NULL)
            return 0;
        else{
            return getNodenum(t->left)+getNodenum(t->right)+1;
        }
    }
    
    // 统计二叉树中叶子结点的个数[递归]
    int getLeafnum(Tree t){
        if(t==NULL)
            return 0;
        if(!t->left&&!t->right)
            return 1;   //左右子树都不存在,即为叶节点
        else{
            return getLeafnum(t->left)+getLeafnum(t->right);
        }
    }
    
    int main(){
        // 样例:AB#CD##E##F#GH###
        Tree t;
        CreateTree(t);
        cout<<endl<<"先序遍历输出:";
        PreOrderTraverse(t);
        cout<<endl<<"中序遍历输出:";
        InOrderTraverse(t);
        cout<<endl<<"后序遍历输出:";
        PostOrderTraverse(t);
        cout<<endl<<"二叉树的深度为:"<<getDepth(t);
        cout<<endl<<"结点的个数为:"<<getNodenum(t);
        cout<<endl<<"叶子结点的个数为:"<<getLeafnum(t);
    
        return 0;
    }
    

      

  • 相关阅读:
    模拟两位选手进行n羽毛球比赛(15分赛制)并计算模拟胜率
    Pyton实例
    Python图片处理
    jieba库的使用和好玩的词云
    Python汉诺塔问题
    多线程同时操作一个epoll_fd
    Linux tr命令
    iptables 深入分析
    Linux xtables
    Linux IPC 共享内存
  • 原文地址:https://www.cnblogs.com/52dxer/p/12345494.html
Copyright © 2020-2023  润新知