二叉树判断

简介: 二叉树判断

Binary tree judgment

判断完全二叉树

思路

使用层序遍历的思想

  • 遇到节点左为空且右不为空,则不是
  • 遇到一个叶子节点,其后必全是叶子节点,否则不是

实现

bool isCBT(Node* root)
{
    if(root != null)
    {
        queue<Node*> Nodeque;
        Nodeque.push(root);
        bool leaf = false;
        while(!Nodeque.empty())
        {
            Node* Front = Nodeque.front();
            Nodeque.pop();
            /******遇到子节点后,后续必全是子节点******/
            if(leaf && (Front->left != null || Front->right != null))
            {
                return false;
            }
            /******左为空,又不为空,不是完全二叉树******/
            if(Front->left == null&&Front->right != null)
            {
                return false;
            }
            if(Front->left) Nodeque.push(Front->left);
            if(Front->right) Nodeque.push(Front->right);
            /******遇到第一个子节点******/
            if(!Front->left && !Front->right) leaf = true;
        }
    }
    return true;
}


判断搜索二叉树

数据

使用preValue表示左子树最后处理的数

思路

实现

static int preValue = -1;
bool isSBT(Node* root)
{
    if(root == null) return true;
    bool isSBTleft = isSBT(root->left);
    if(!isSBTleft) return false;
    if(root->value <= preValue) return false;
    preValue = root->value;
    return isSBT(root->right);
}

总结

需要结合这两种二叉树的特性进行判断,考验对其结构的理解

目录
相关文章
|
11月前
二叉树层序遍历及判断完全二叉树
二叉树层序遍历及判断完全二叉树
141 2
|
4月前
|
存储
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
39 1
|
4月前
|
机器学习/深度学习 C++
初阶数据结构之---二叉树链式结构(二叉树的构建,二叉树的前序,中序,后序和层序遍历,计算二叉树结点个数,第k层结点个数,叶子结点个数,判断是否为完全二叉树)
初阶数据结构之---二叉树链式结构(二叉树的构建,二叉树的前序,中序,后序和层序遍历,计算二叉树结点个数,第k层结点个数,叶子结点个数,判断是否为完全二叉树)
|
4月前
|
算法 编译器 C语言
二叉树的创建、销毁、层序遍历与层序遍历的进阶、利用层序遍历判断二叉树是否是为完全二叉树
二叉树的创建、销毁、层序遍历与层序遍历的进阶、利用层序遍历判断二叉树是否是为完全二叉树
|
4月前
|
算法
二叉树的结点个数、叶子结点个数的代码实现<分治算法>
二叉树的结点个数、叶子结点个数的代码实现<分治算法>
|
存储 算法
二叉树的三序遍历
简要介绍二叉树的三序遍历和重构和代码实现。
二叉树判断
二叉树判断
58 0
二叉树四种遍历的实现
二叉树四种遍历的实现
93 0
二叉树的实现(前中后层序四种遍历)
二叉树的实现(前中后层序四种遍历)
49 0