• 二叉树的基本操作实现,包括二叉搜索树的判断


    #include<iostream>
    using namespace std;
    
    //定义节点
    typedef struct node
    {
        struct node *lchild;
        struct node *rchild;
        int data;
    }BiTreeNode, *BiTree;     //*BiTree的意思是给 struct node*起了个别名,叫BiTree,故BiTree为指向节点的指针。
    
    
    //按照前序顺序建立二叉树
    void createBiTree(BiTree &T) //&的意思是传进来节点指针的引用,括号内等价于 BiTreeNode* &T,目的是让传递进来的指针发生改变
    {                        
    int c;
    cin >> c;
    if(0 == c)             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
    T = NULL;
    else
    {
        T = new BiTreeNode;
        T->data=c;
        createBiTree(T->lchild);
        createBiTree(T->rchild);
    }
    }
    
    bool judgeSortT(BiTree  T)//判断是否为排序树
    {
        bool lj;
        if(!T)
            return 1;
        lj=judgeSortT(T->lchild);//左子树判断
        if(T->lchild && T->lchild->data>T->data)
                lj=0;
        
        if(T->rchild && T->data>T->rchild->data)
                lj=0;
        return lj && judgeSortT(T->rchild);//T的左子树及其当前结点T均符合要求则对右子树进行判断
    }
    
    void dispLeaf(BiTree  T,int lev)//显示叶子结点
    {
        if(T)
        {
            dispLeaf(T->lchild,lev+1);
            if(!T->lchild && !T->rchild)
                cout<<T->data<<'	'<<lev<<endl;
            dispLeaf(T->rchild,lev+1);
        } 
    }
    
    //前序遍历二叉树并打印
    void preTraverse(BiTree T)
    {
        if(T)
        {
            cout<<T->data<<" ";
            preTraverse(T->lchild);
            preTraverse(T->rchild);
        }
    }
    //中序遍历二叉树并打印
    void midTraverse(BiTree T)
    {
        if(T)
        {
            midTraverse(T->lchild);
            cout<<T->data<<" ";
            midTraverse(T->rchild);
        }
    }
    //后续遍历二叉树并打印
    void postTraverse(BiTree T)
    {
        if(T)
        {
            postTraverse(T->lchild);
            postTraverse(T->rchild);
            cout<<T->data<<" ";
        }
    }
    int main()
    {
        BiTree T;               //声明一个指向二叉树根节点的指针               
        createBiTree(T);
        cout<<"二叉树创建完成!"<<endl;
    
       // cout<<"前序遍历二叉树:"<<endl;
        //preTraverse(T);
        //cout<<endl;
        cout<<"中序遍历二叉树:"<<endl;
        midTraverse(T);
        cout<<"排序树"<<judgeSortT(T)<<endl;
        dispLeaf(T,1);
        //  cout<<endl;
        // cout<<"后序遍历二叉树:"<<endl;
      //  postTraverse(T);
        return 0;
    }
  • 相关阅读:
    git 查看、创建、切换、删除、重命名和推送分支
    Java 构造器或构造方法
    Java 二维数组
    Java 引用类型数组
    Java this关键字
    STM8S103 PB4和PB5
    RK3288 dts文件中背光配置参数
    Laravel Cache 缓存钉钉微应用的 Access Token
    Laravel View Composer
    Laravel Cache 的缓存文件在到期后是否会自动删除
  • 原文地址:https://www.cnblogs.com/ewitt/p/10038775.html
Copyright © 2020-2023  润新知