【面试题】判断一棵二叉树是否是完全二叉树

来源:互联网 发布:知乎怎么用 编辑:程序博客网 时间:2024/06/08 12:29

判断一棵树是否是完全二叉树,这道题是层序遍历二叉树的升级版,其实运用的知识就是层序遍历。

我们先来回顾一下如何层序遍历一棵二叉树

二叉树的结构:

template<class T>struct BinaryTreeNode{    T _data;    BinaryTreeNode<T>* _left;    BinaryTreeNode<T>* _right;    BinaryTreeNode(const T& x)        :_data(x)        , _left(NULL)        , _right(NULL){}};

层序遍历二叉树

void LevelOrder()//层序   队列    {        queue<Node*> q;        if (_root)        {            q.push(_root);        }        while (!q.empty())        {            Node* front = q.front();            cout << front->_data << " ";//取对头数据            q.pop();            if (front->_left)                q.push(front->_left);            if (front->_right)            {                q.push(front->_right);            }        }        cout << endl;    }

下面来看如何运用层序判断是不是完全二叉树。

怎么理解什么是完全二叉树呢?
这里写图片描述
类似于(a)图中的二叉树就是完全二叉树,类似于(b)图中的二叉树就是非完全二叉树。

bool Complete(Node* root)    {        queue<Node*> q;        Node* cur = NULL;        if (root)            q.push(root);        while (cur = q.pop() != NULL)        {            q.push(cur->_left);            q.push(cur->_right);        }        while (!q.empty())        {            cur = q.pop();            if (cur != NULL)            {                return false;            }        }        return true;    }

我们举例来理解一下上述代码
有一颗二叉树如下:
这里写图片描述
分析如下:
这里写图片描述

阅读全文
1 0
原创粉丝点击