zoukankan      html  css  js  c++  java
  • 算法题---完全二叉树的判定

    思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:

    某节点没有左孩子,则一定无右孩子

    若某节点缺左或右孩子,则其所有后继一定无孩子

    若不满足上述任何一条,均不为完全二叉树。

    void IsComplete_BiTree(BiTree T)
    {
        if (T == NULL) { cout << "NULL BITREE error!" << endl; return; }
        Node*Q[MAXSIZE];Node*p=NULL; int f = 0; int r = 0;
        int final_judge = 1;    //迄今为止二叉树为完全二叉树。初值为1。
        int flag = 1;    //迄今为止所有节点均有左右孩子。初值为1。
        Q[r]= T; r++;
        p = T;
        while (f != r)
        {
            p=Q[f]; f++;
            /*p结点没有左孩子*/
            if (p->lc == NULL)    
            {
                flag = 0;
                if (p->rc != NULL)    //没有左孩子但有右孩子
                    final_judge = 0;    //则不是完全二叉树
            }
            /*p结点有左孩子*/
            else 
            {
                if (flag == 1)   //迄今为止所有结点都有左、右孩子
                {
                    Q[r] = p->lc; r++;    //左孩子入队
                    if (p->rc)    //有右孩子,则右孩子入队
                    {
                        Q[r] = p->rc; r++;
                    }
                    else flag = 0;    //否则,flag置0
                }
                else    //迄今为止已有结点缺孩子
                    final_judge = 0;
            }
        }
        if (final_judge == 1)    cout << "是完全二叉树。" << endl;
        else cout << "不是完全二叉树。" << endl;
        return;
    }
  • 相关阅读:
    mysql 版本查看
    js 中文乱码
    浏览器内核
    Squid 代理服务器
    minicygwin
    firefox 插件开发
    ocx c++
    NetBeans
    android 虚拟机
    ExpandableListView
  • 原文地址:https://www.cnblogs.com/luckyraye/p/6752179.html
Copyright © 2011-2022 走看看