测试一棵二叉树是否为完全二叉树

完全二叉树的定义我就不说了,可以去百度,这里的思想是,在检测到某节点A的左孩子或者右孩子为空后将标志位置0,如果在这之后又检测到其他节点左孩子或者右孩子非空,那么就可以判断这不是一棵完全二叉树。为了达到从上到下,从左往右的扫描顺序,我们使用层次遍历。代码如下

 /**
     * 检测一棵树是不是完全二叉树
     * 这里采用层次遍历在遍历到某节点的子节点空时将flag置为0,之后若有其他节点的子节点存在则返回false
     * @param node
     * @return
     */
    public boolean checkIfCompleteTree(Node node){
    	Node[] queue=new Node[255];
    	int tail=0;
    	int head=0;//队头指针与队尾指针
    	Node p=node;
    	int flag=1;
    	if(p!=null){
    		queue[tail++]=node;//将节点加入队列中
    		while(head!=tail){ //即队不空
    			Node temp=queue[head++];
    			if(temp.left!=null){
    				if (flag==0)
    					return false;
    				else{
    					queue[tail++]=temp.left;
    				}
    			}
    			else{
    				flag=0;
    			}
    			if(temp.right!=null){
    				if(flag==0){
    					return false;
    				}
    				else{
    					queue[tail++]=temp.right;
    				}
    			}
    			else{
    				flag=0;
    			}
    		}
    	}
    	return true;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值