zoukankan      html  css  js  c++  java
  • 二叉树的基本操作实现,包括二叉搜索树的判断

    #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;
    }
  • 相关阅读:
    build tools
    文档系统总结
    各进制及其转换详解
    JQuery 函数执行顺序
    计算页面宽高的函数
    Linq中的多表左联,详细语句
    css设置滚动条颜色与样式以及如何去掉与隐藏滚动条
    基于JQUERY写的 LISTBOX 选择器
    js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange
    JQuery select控件的相关操作
  • 原文地址:https://www.cnblogs.com/ewitt/p/10038775.html
Copyright © 2011-2022 走看看