zoukankan      html  css  js  c++  java
  • 非递归二叉排序树

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cmath>
    #include<algorithm>//非递归
    using namespace std;
    int a[1000];
    int q = 0;
    int flag = 0;
    typedef struct BiTNode {
        int data;
        struct BiTNode *lchild, *rchild;
        int count;
    }BiTNode,*BiTree;
    void InsertBST(BiTree &T,int e)
    {
        BiTNode *cur=T;
        BiTree s = new BiTNode;
        s->data = e;
        s->count = 0;
        s->lchild = NULL;
        s->rchild = NULL;
        if (!T)
        {
    
            T = s;
        }
        else
        {
            BiTNode *parent=T;
            while (cur != NULL)
            {
                parent = cur;
                if (e > parent->data)
                    cur = parent->rchild;
                else
                    if (e < parent->data)
                        cur = parent->lchild;
                    else
                        if (e == parent->data)
                        {
                            parent->count++;
                            flag = 1;
                            break;
                        }
            }
            if (e > parent->data)
                parent->rchild = s;
            if (e < parent->data)
                parent->lchild = s;
        }
    }
    void CreatBST(BiTree &T,int n,int V[])
    {
        T = NULL;
        for (int i = 0; i < n; i++)
        {
            InsertBST(T, V[i]);
        }
    }
    int s[1000];
    int i = 0;
    void InorderTraverse(BiTree T,int e)
    {
        if (T != NULL)
        {
            
            InorderTraverse(T->lchild,e);
            if (T->data != e)
            {
                cout << " " << T->data;
                s[i] = T->count;
                i++;
            }
            InorderTraverse(T->rchild,e);
        }
    }
    int main()
    {
        int n;
        while (cin >> n && n != 0)
        {
            q = 0;
            BiTree T;
            int V[1000];
            flag = 0;
            for (int i = 0; i < 100; i++)
                s[i] = 0;
            for (int i = 0; i < n; i++)
            {
                cin >> V[i];
            }
            CreatBST(T, n, V);
            int a;
            cin >> a;
            InsertBST(T, a);
            BiTree p;
            p = T;
            while (p->lchild)
            {
                p = p->lchild;
            }
            cout << p->data;
            s[0] = p->count;
            i++;
            int e = p->data;
            InorderTraverse(T,e);
            cout << endl;
            int m=0;
            if (flag == 0)
                m = n + 1;
            else
                m = n;
            cout << s[0];
            for (int i = 1; i < m; i++)
            {
                cout << " " << s[i];
            }
            cout << endl;
        }
        return 0;
    }

    1

  • 相关阅读:
    函数名的应用/列表推导式
    装饰器/内置函数
    函数的基础
    文件的改的操作
    常用str
    python 定时器 timer QTimer
    Python 2.7.16 pyinstaller3.0 生成exe可执行文件
    python 根据excel单元格内容获取该单元格所在的行号
    python 实现仪器LAN口通信(FLUKE 8846)
    VS2019 MSB8041 MSB8042 Error
  • 原文地址:https://www.cnblogs.com/h694879357/p/11920836.html
Copyright © 2011-2022 走看看