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

import java.util.LinkedList;
import java.util.Queue;

public class judgeTree {
    public static boolean judge(TreeNode root){
        if(root == null)
            return true;
        Queue<TreeNode> qu = new LinkedList<TreeNode>();
        qu.add(root);
        TreeNode temp = null;
        int flag = 0;
        while(!qu.isEmpty()){
            temp = qu.peek();
            qu.remove();
            if(temp.left != null && flag == 0)
                qu.add(temp.left);
            else if(temp.left != null)
                return false;
            else
                flag =1;
            
            if(temp.right != null && flag == 0)
                qu.add(temp.right);
            else if(temp.right != null)
                return false;
            else
                flag =1;
        }
        return true;
    }
}

注:网上搜来的解法。层序遍历,设置标志位flag,遇到有null的值就置flag为1,flag不为1且节点的孩子节点不为null,入队,否则(flag为1且节点的孩子节点不为null,即前面有为null的结点,必然不是完全二叉树)返回false,都不满足则置flag为1(表示遇到了null结点)

时间: 2024-10-13 03:45:22

判断二叉树是否为完全二叉树的相关文章

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

题目:判断一棵二叉树是否是完全二叉树 思路: 1.首先明确完全二叉树的概念.完全二叉树除最后一层外,所有层结点数均达到最大值,最后一层结点连续集中在最左边.空树也是完全二叉树. 2.我们可以通过层序遍历的方式遍历这个二叉树,使用一个队列存储遍历的结点.可以利用最后一层的结点集中在左侧这个特性解题,具体看代码: 代码: bool isCompleteTree(pTree pT) { Queue q; initQueue(&q); Enqueue(&q,pT);//根入队 pNode ptr

第4章第1节练习题10 判断某二叉树是否为完全二叉树

问题描述 试写一算法,完成判定某二叉树是否为完全二叉树的功能 算法思想 根据完全二叉树的定义,具有n个节点的完全二叉树与满二叉树中的编号从1~n的节点一一对应,可以考虑使用层次遍历的思想来实现. 将所有节点入队(包括空节点).当遇到空节点时,查看其后是否还有不为空的节点:如果没有,则为完全二叉树:如果有,则不是完全二叉树: 算法描述 int IsComplete(BiTNode* T){ SqQueue Q; InitQueue(&Q); BiTNode *p=T; EnQueue(&Q,

编程判断一个树是完全二叉树(使用层次遍历实现)

完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同 如何判断一个树是完全二叉树 可以使用层序遍历,只需2个步骤 第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树 第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树 排除以上两种情况,则树是完全二叉树 核心代码: //层序遍历 int LayerOrder(BiTreeNode *head) { bool flag=0; LQueue Q; Initiate_Que

LeetCode:Symmetric Tree - 判断二叉树是否对称

1.题目名称 Symmetric Tree(判断二叉树是否对称) 2.题目地址 https://leetcode.com/problems/symmetric-tree/ 3.题目内容 英文:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). 中文:给定一颗二叉树,检查它是否与自己的镜像是同一棵树(即围绕根节点对称). 4.解题方法 本题与题目"Same Tr

判断二叉树是否平衡

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 注:这里不考虑该二叉树是否是二叉排序树 解决要点: 1.后序遍历二叉树: 2.递归. 核心算法: bool isBalanced(pTree pT,int *depth) { if(!pT)//参数判断 { *depth = 0; return true; } //后序遍历 int left,right; if(isBalanced(pT->lChild,&

编程算法 - 判断二叉树是不是平衡树 代码(C)

判断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 判断该树是不是平衡二叉树. 二叉平衡树: 任意结点的左右子树的深度相差不超过1. 使用后序遍历的方式, 并且保存左右子树的深度, 进行比较. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <std

56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]

[本文链接] http://www.cnblogs.com/hellogiser/p/is-balanced-tree.html [题目] 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如下图中的二叉树就是一棵平衡二叉树: [分析] 之前的博文27.二元树的深度[BinaryTreeDepth]中介绍过如何求二叉树的深度.有了经验之后再解决这个问题,我们很容易就能想到思路. [方案1] 先判断左右子树是不是平衡的

判断二叉树是否平衡二叉树

题目 平衡二叉树的性质为:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树. 难度:?? 基础理解 以下是个人认为对概念叙述较为详细的参考链接: 对平衡二叉树的理解:判断二叉树是否为平衡二叉树 对先序.中序.后序遍历的理解:二叉树的实现及先序.中序.后序遍历 设计 概要设计 设计一个初始树节点模型 接收节点变量并判断是否为平衡二叉树的方法 如何判断是否为平衡二叉树 包含对左右各分支节点的计数器,并以此相减,是否满足绝

设计一个算法,判断一个二叉树是否为完全二叉树

思想:根据完全二叉树的定义,对完全二叉树按照从上到下.从左到右的层次遍历,应该满足一下两条要求: ●某节点没有左孩子,则一定无右孩子 ●若某节点缺左或右孩子,则其所有后继一定无孩子 若不满足上述任何一条,均不为完全二叉树. 算法思路:采用层序遍历算法,用cm变量值表示迄今为止二叉树为完全二叉树(其初值为1,一旦发现不满足上述条件之一,则置cm为0),bj变量值表示迄今为止所有节点均有左右孩子(其初值为1),一旦发现一个节点没有左孩子或没有右孩子时置bj为0),在遍历完毕后返回cm的值. 对应的算