初学数据结构---判断是否为满二叉树

// 判断满二叉树.cpp : 定义控制台应用程序的入口点。

//

#include “stdafx.h”

#include <iostream>

#include <queue>

using namespace std;

//节点的数据结构

class BTree

{

public:

int       m_nValue;

BTree*    m_nLeft;

BTree*    m_nRight;

public:

BTree(int value)

{

m_nValue = value;

}

};

//二叉树的插入实现

void Insert(int value, BTree* &root)

{

if(root == NULL)

{

root = new BTree(value);

}

else if(value < root->m_nValue)

Insert(value, root->m_nLeft);

else if(value > root->m_nValue)

Insert(value, root->m_nRight);

else

;

}

bool IsCompleteBTree(BTree* pRoot)

{

if(pRoot == NULL)

return false;

queue<BTree *> q;

q.push(pRoot);

bool mustHaveNoChild = false;

bool result = true;

while(!q.empty())

{

BTree* pNode = q.front();

q.pop();

if(mustHaveNoChild)//如果一个节点没有子节点;只要出现了空子树的节点,后面出现的必须为叶子节点(左字树右子树必须为空)

{

if(pNode->m_nLeft != NULL || pNode->m_nRight != NULL)

{

result = false;

break;

}

}

else

{

if(pNode->m_nLeft != NULL && pNode->m_nRight != NULL)

{

q.push(pNode->m_nLeft);

q.push(pNode->m_nRight);

}

else if(pNode->m_nLeft != NULL && pNode->m_nRight == NULL)

{

mustHaveNoChild = true;

q.push(pNode->m_nLeft);

}

else if(pNode->m_nLeft == NULL && pNode->m_nRight != NULL)

{

result = false;

break;

}

else

{

mustHaveNoChild = true;

}

}

}

return result;

}

int main()

{

BTree* m_pRoot = new BTree(5);

Insert(6, m_pRoot);

Insert(3, m_pRoot);

Insert(4, m_pRoot);

Insert(2, m_pRoot);

cout << “是否是完全二叉树:” << IsCompleteBTree(m_pRoot) << endl;

system(“pause”);

return 0;

}

    原文作者:满二叉树
    原文地址: https://blog.csdn.net/Mr_Ming_/article/details/73089902
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞