zoukankan      html  css  js  c++  java
  • 二叉树的基本操作

    /*
     * @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;
    }
    

      

  • 相关阅读:
    json返回数据拼接HTML
    jquery文本框验证字符长度和只能输入数字
    DataTable转换为Json格式
    将集合类转换成DataTable
    class创建单击事件
    ajax局部刷新分页
    查找根字符串
    游标的使用——mysql
    .NET 各种框架
    xml与datatable类型互换
  • 原文地址:https://www.cnblogs.com/52dxer/p/12345494.html
Copyright © 2011-2022 走看看