如何判断是完全二叉树

原创 2018年01月03日 09:19:33

完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。

判断是否是完全二叉树的思路:当对一个二叉树进行遍历的时候,如果是完全二叉树当遇到空节点的时候整棵树的节点都已经全部遍历完,空节点会在遍历的末尾,所以只需要判断在遇到空节点的时候二叉树是否遍历结束即可。

一.利用队列,进行层序遍历
1.根据层序遍历,遇到节点就压入队列,左子树节点和右子树节点为空也压入队列,直至队头节点为空;
2.取队列的队头节点,判断是否为空,如果有节点存在就不是完全二叉树。

这里写图片描述

//判断完全二叉树
bool IsCompleteTree1()
{
    queue<Node*> q;
    q.push(_root);
    Node* cur = q.front();
    while (cur)
    {
        q.pop();
        q.push(cur->_leftNode);
        q.push(cur->_rightNode);
        cur = q.front();
    }
    while (!q.empty())
    {
        if (q.front())
        {
            return false;
        }
        q.pop();
    }
    return true;
}

二,加标记法
初始flag为true,表示没有遇到空节点,当压入队列的节点左右节点不为空的时候,flag不变;遇到空节点的时候flag为false,这时如果再遇到有节点存在的情况,表示不是完全二叉树。

bool IsCompleteTree2()
{
    queue<Node*> q;
    q.push(_root);
    bool flag = true;
    while (!q.empty())
    {
        Node* front = q.front();
        q.pop();
        //判断左子树节点
        if (front->_leftNode)
        {
            //已经遇到NULL节点
            if (flag == false)
            {
                return false;
            }
            q.push(front->_leftNode);
        }
        //第一次遇到NULL节点
        else
        {
            flag = false;
        }
        //判断右子树节点
        if (front->_rightNode)
        {
            if (flag == false)
            {
                return false;
            }
            q.push(front->_rightNode);
        }
        //第一次遇到NULL子树节点
        else
        {
            flag = false;
        }
    }
    return true;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39295755/article/details/78957473

刷题有感——查找完全二叉树某一层的节点个数

今天在牛客网上做了一题,是关于完全二叉树在某一层的节点的个数问题,题目不难,但是由于水平太渣,调试了好久才ac. 题目是这样的。 有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输...
  • u013264213
  • u013264213
  • 2016-10-22 19:04:21
  • 411

判断完全二叉树

二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树。 核心代码: int IsCompleteTree(BiTree Bt) { Sq q;BiTree e; InitSq(q)...
  • Singular__point
  • Singular__point
  • 2016-10-24 19:50:33
  • 2205

如何判断一棵二叉树是否是完全二叉树

初次学习二叉树这种数据结构的时候,我们知道,假如一棵二叉树的高度是h,对于一棵完全二叉树,它的前h-1行一定是满的,第h行可以满也可以不满(结点必须集中于最后一行的左边),如果满则是满二叉树,不满的就...
  • peiyao456
  • peiyao456
  • 2016-11-13 21:00:42
  • 4081

~判断一棵树是否是完全二叉树~

判断一棵树是否是完全二叉树
  • manongdeyipiant
  • manongdeyipiant
  • 2017-05-03 20:56:25
  • 723

Leetcode 222 Count Complete Tree Nodes 完全二叉树的结点数

给出一个完全二叉树,计算其结点数。
  • smile_watermelon
  • smile_watermelon
  • 2015-08-27 18:45:23
  • 231

判断一颗二叉树是否是完全二叉树

我们知道,假如一棵二叉树的高度是h,对于一棵完全二叉树,它的前h-1行一定是满的,第h行可以满也可以不满,但是结点必须集中于最后一行的左边,如果满则是满二叉树,不满的就是完全二叉树。 那么那...
  • qq_33417547
  • qq_33417547
  • 2016-12-01 17:06:51
  • 1648

【数据结构】判断一棵树是否为完全二叉树

【数据结构】判断一棵树是否为完全二叉树
  • LX18792732127
  • LX18792732127
  • 2017-07-29 15:35:17
  • 902

[各种面试题] 完全二叉树节点个数的统计

给定一棵完全二叉树(查看定义)的根结点,统计该树的结点总数。 树结点类型名为TreeNode,您没必要知道该类型的定义,请使用下面的方法得到某个结点的左,右儿子结点,以及判断某结点是否为NULL...
  • a83610312
  • a83610312
  • 2013-09-19 23:00:14
  • 3839

数据结构面试题/判断一棵树是否是完全二叉树

二叉树: 1.满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上。 2.完全二叉树:如果一棵具有N个结点的二叉树的结构与满二叉树的前N个结点的结构相同,称...
  • s25691011
  • s25691011
  • 2017-07-29 20:09:52
  • 1028
收藏助手
不良信息举报
您举报文章:如何判断是完全二叉树
举报原因:
原因补充:

(最多只允许输入30个字)