java判定二叉树是否完全二叉树

boolean isCompleteBinaryTree()

判断二叉树是不是一棵完全二叉树,如果是,返回true,否则返回假。

一开始想把二叉树结点层次遍历转换成队列表示,用1表示不为null,用0表示为null,只要判断1前面有没有0就可以了,1前面有0就不为完全二叉树.后来,实现困难,故换了种方法.

	public boolean IsCompleteBinaryTree() {
		Deque<BiTreeNode<T>> queue = new ArrayDeque<>();
		queue.offer(root);
		boolean signation = false;
		while(!queue.isEmpty()) {
			BiTreeNode<T> t = queue.poll();
			if((t.lchild == null&&t.rchild != null) ||(signation && (t.lchild!=null || t.rchild!=null))) {
				return false;
			}
			if(t.lchild!=null) {
				queue.offer(t.lchild);
			}
			if(t.rchild!=null) {
				queue.offer(t.rchild);
			}
			else { 
				signation = true;
			}
		}
		return true;
	}

把结点放进数组,队列不为空时,取出从队列取出结点.
1.当结点没有左子树但有右子树时,跳出循环,false.既(t.lchild == null&&t.rchild != null)

2.signation表示一个状态,当t的rchild为null时,进入此状态,以后的结点要全部为叶子节点,既(t.lchild!=null || t.rchild!=null)否则就false.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值