zoukankan      html  css  js  c++  java
  • L3-010. 是否完全二叉搜索树

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。

    输入格式:

    输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。

    输出格式:

    将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出“YES”,如果该树是完全二叉树;否则输出“NO”。

    输入样例1:
    9
    38 45 42 24 58 30 67 12 51
    
    输出样例1:
    38 45 24 58 42 30 12 67 51
    YES
    
    输入样例2:
    8
    38 24 12 45 58 67 42 51
    
    输出样例2:
    38 45 24 58 42 12 67 51
    NO
    

    完全二叉树的定义叶子结点只能出现在最后一层和以及最后一层的上一层且最后一层的结点靠左,不能存在只有右结点的结点,层序遍历中,每个结点的儿子数不能大于上一个结点的儿子数。
    代码:
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <queue>
    using namespace std;
    struct tree
    {
        int data;
        tree *l,*r;
        tree()
        {
            l = r = NULL;
        }
    }*root;
    void level()
    {
        int flag = 1,c = 0,e = 0;
        queue<tree *>q;
        if(root)q.push(root);
        while(!q.empty())
        {
            int d = 0;
            if(q.front() -> l)q.push(q.front() -> l),d ++;
            if(q.front() -> r)
            {
                q.push(q.front() -> r);
                if(!d)flag = 0;
                else d ++;
            }
            if(c && d > e)flag = 0;
            e = d;
            if(c)cout<<' '<<q.front() -> data;
            else
            {
                c = 1;
                cout<<q.front() -> data;
            }
            q.pop();
        }
        cout<<endl;
        if(flag)cout<<"YES";
        else cout<<"NO";
    }
    tree *insert_(tree *node,int d)
    {
        if(node == NULL)
        {
            node = new tree();
            node -> data = d;
        }
        else if(d > node -> data)node -> l = insert_(node -> l,d);
        else node -> r = insert_(node -> r,d);
        return node;
    }
    int main()
    {
        int n,d;
        cin>>n;
        root = NULL;
        for(int i = 0;i < n;i ++)
        {
            cin>>d;
            root = insert_(root,d);
        }
        level();
        return 0;
    }
  • 相关阅读:
    控制asp.net 中文本框中只能输入数字
    数据导出到Excel的方法
    NET 2.0中泛型
    DateTime类常用技巧
    CodeSmith是一个基于模板的代码生成器
    WCF学习第一天
    asp.net mvc中DropDownList,CheckBox,RadioButton
    wcf实现可靠性传输
    cookie
    asp.net mvc3 异步Controller
  • 原文地址:https://www.cnblogs.com/8023spz/p/8641280.html
Copyright © 2011-2022 走看看