判断二叉树是不是为满二叉树 (C++描述)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断二叉树是不是为满二叉树 (C++描述)相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<math.h>
#define TURE 1
#define FALSE 0
template<class T>
class BTNode
friend BTree<T>;
public:
BTNode()LChild=0;RChild=0;;
private:
T data;
BTNode<T> *LChild,*RChild;
;
template<class T>
class BTree
public:
BTree()root=0;;
bool Judge(BTNode<T> *t)const;
int Height(BTNode<T> *t)const;
int NodesNum(BTNode<T> *t)const;
private:
BTNode<T> *root;
;
template<class T>
bool BTree<T>::Judge(BTNode<T> *t)
int h=Height(t);
int n=NodesNum(t);
if(n==pow(2,h)-1)
return TURE;
else
return FALSE;

int BTree<T>::Height(BTNode<T> *t)
if(!t) return 0;
int hl=Height(t->LChild);
int hr=Height(t->RChild);
if(hl>hr) return ++hl;
else return ++hr;

template<class T>
int BTree<T>::NodesNum(BTNode<T> *t)
if(!t)
return 0;
int numl=NodesNum(t->LChild);
int numr=NodesNum(t->RChild);
return numl+numr+1;

int main()
BTree<int> *t;
t.Judge();
return 0;


没有构造二叉树的步骤,只写了判断二叉树是否是满二叉树 有哪里错误吗?

倒是对的,但你不觉得太麻烦了吗?一道初三题不用这么做,如果是满二叉树结点数一定是2的n次方-1,直接判断就行了!追问

就是要求写算法呢?

参考技术A 非常正确,逻辑清晰

二叉树满二叉树完全二叉树

二叉树



二叉树有左,右子树之分,且每个节点的度不大于2。
二叉树最多有2n-1个节点。每一层最多有2n-1个节点。

如上图, 这是两颗不同的树,因为二叉树是有序的,左右子树次序不能颠倒。


满二叉树(完美二叉树)

除了叶子结点,每个结点的度都为2的树


完全二叉树

除去最后一层节点为满二叉树的树,且每层节点从左到右分布


结束语

童话说雨后会有一道彩虹。


以上是关于判断二叉树是不是为满二叉树 (C++描述)的主要内容,如果未能解决你的问题,请参考以下文章

算法题0009 | 求完全二叉树结点个数

二叉树入门知识——一篇了解二叉树

二叉树满二叉树完全二叉树

完全二叉树判断,简单而复杂

如何判断二叉树是满二叉树?

怎么判断是不是是完全二叉树 用C++或C语言