如何判断是完全二叉树

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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

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

【题目】 有一棵二叉树,请设计一个算法判断它是否是完全二叉树。 给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。 【分析】完全二叉树树...
  • FreeeLinux
  • FreeeLinux
  • 2016年12月19日 10:29
  • 2708

【Java实现】判断一棵树是否为BST,一棵树是否为完全二叉树

给定一个二叉树,判断它是不是二叉搜索树。 思路:对于一棵二叉树,最简单的方法就是中序遍历,看是不是一个递增数列,如果是,则是一棵二叉搜索树,如果不是,则不是二叉搜索树。在这里用一个lastVisit去...
  • universe_ant
  • universe_ant
  • 2017年06月15日 01:30
  • 1716

C++算法之 判断是否为完全二叉树

判断完全二叉树: 完全二叉树,除最后一层外,每一层上的节点树都达到了最大值;在最后一层上只缺少右边的若干节点! 算法思路: 按层次(从上到下,从左到右)遍历二叉树,当遇到一个节点的左子树为空时,...
  • djb100316878
  • djb100316878
  • 2015年01月12日 11:36
  • 4779

数据结构--完全二叉树的判断

#include using namespace std; #define max 100 typedef char elemtype; typedef struct node { elemtype...
  • weixin_38158043
  • weixin_38158043
  • 2017年11月29日 16:54
  • 36

完全二叉树的判断

完全二叉树(Complete Binary Tree):若设二叉树的深度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大个数,第h层所有的节点都连续集中在最左边,这就是完全二叉树。完全二叉树...
  • he_shuai20
  • he_shuai20
  • 2017年05月04日 23:51
  • 936

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

提示:层序遍历变型题。 完全二叉树:根节点下除叶子节点外,每个结点的左右子树不能为空,叶子结点重左至右依次存在。 满二叉树:完全二叉树的特殊情况,每一层节点数为2^( n -1 )个。 验证过程...
  • sinat_36101354
  • sinat_36101354
  • 2017年08月07日 21:04
  • 105

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

完全二叉树的定义(Complete Binary Tree)若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二...
  • dycljj
  • dycljj
  • 2017年07月29日 18:25
  • 158

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

这道题可以看作是层序遍历的变形。在二叉树的层序遍历中,我们借助一个数据结构队列,根据其先进先出的性质,实现层序遍历。可以定义一个flag标志位,一旦遇到空节点,标志位生效。...
  • weixin_35140291
  • weixin_35140291
  • 2017年07月28日 15:29
  • 179

判断一个树为完全二叉树

完全二叉树 该节点有左子树,可以没有有子树,但如果有右子树,就必须有左子树这里我们可以用层序遍历的思想,借助一个队列,队列保存的是Node*,将该节点入队列,出队列的同时将下一层自己的左右节点入队列...
  • xs_520
  • xs_520
  • 2017年08月04日 17:39
  • 127
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何判断是完全二叉树
举报原因:
原因补充:

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