判断完全二叉树

判断完全二叉树完全二叉树的定义:一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fr=aladdin百度定义 思路:层序遍历二叉树如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列…

大家好,又见面了,我是你们的朋友全栈君。

完全二叉树的定义: 一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。

https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fr=aladdin

百度定义

 

思路:层序遍历二叉树

如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列

如果一个结点,左孩子为空,右孩子不为空,则该树一定不是完全二叉树

如果一个结点,左孩子不为空,右孩子为空;或者左右孩子都为空:::::则该节点之后的队列中的结点都为叶子节点;该树才是完全二叉树,否则返回false。

非完全二叉树的例子(对应方法的正确性和必要性):

判断完全二叉树判断完全二叉树判断完全二叉树

下面写代码:

定义结点:

    public static class Node {
		public int value;
		public Node left;
		public Node right;

		public Node(int data) {
			this.value = data;
		}
	}

方法:

	public static boolean isCBT(Node head) {
		if (head == null) {
			return true;
		}
		Queue<Node> queue = new LinkedList<Node>();
		boolean leaf = false;
		Node l = null;
		Node r = null;
		queue.offer(head);
		while (!queue.isEmpty()) {
			head = queue.poll();
			l = head.left;
			r = head.right;
			if ((leaf && (l != null || r != null)) || (l == null && r != null)) {
				return false;//当前结点不是叶子结点且之前结点有叶子结点 || 当前结点有右孩子无左孩子
			}
			if (l != null) {
				queue.offer(l);
			}
			if (r != null) {
				queue.offer(r);
			} else {
				leaf = true;//无孩子即为叶子结点
			}
		}
		return true;
	}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158639.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Linux下C语言 system函数返回值「建议收藏」

    Linux下C语言 system函数返回值「建议收藏」例:status=system("./test.sh");1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.sh是否正确执行?仅判断status是否==…

  • VMware 搭建私有云

    VMware 搭建私有云我们的目的是在VMwareworkstation上安装Centos7系统,并配置用远程桌面访问虚拟机。在虚拟机上安装Centos7首先按照老师给出的博客(VirtualBox安装Centos7笔记)进行安装。博主使用的是virtualBox,但VMware的操作也是基本相同,并且不需要单独设置虚拟机远程访问模式。安装完后我遇到了问题ifconfig:…

  • 【AekdyCoin】求小于等于N的与N互质的数的和

    【AekdyCoin】求小于等于N的与N互质的数的和又向大牛学到了一点。以下内容转大牛文章:ifgcd(n,i)=1thengcd(n,n-i)=1(1反证法:如果存在K!=1使gcd(n,n-i)=k,那么(n-i)%k==0而n%k=0那么必须保证i%k=0k是n的因子,如果i%k=0那么gcd(n,i)=k,矛盾出现;于是问题变的非常简单ANS=N*phi(N)/2i,n-i总是成对

  • mysql数据库连接配置文件(db.properties)

    mysql数据库连接配置文件(db.properties)db.driver=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/learn-test?useUnicode=true&characterEncoding=utf8db.username=rootdb.password=123456说明:如url使用的是本地数据库且端口是3306,可以省略lo…

  • 达梦数据库的函数_达梦数据库连接命令

    达梦数据库的函数_达梦数据库连接命令SQL工作笔记-达梦数据库关于时间的函数http://blog.itpub.net/69995127/viewspace-2758308/达梦数据库的查询以及函数的使用

    2022年10月28日
  • 阿里云mqtt服务器_阿里云ecs新手教程

    阿里云mqtt服务器_阿里云ecs新手教程概述本篇主要讲述使用MQTTX软件与阿里云进行连接,上篇文章open62541基于mqtt订阅发布中有有关MQTTX软件的下载以及使用。建立连接这里我们使用MQTTX与阿里云建立连接,阿里云地址:https://iot.console.aliyun.com/lk/summary/new这里我们进行注册以及实名认证后进行登录,登录后界面如下所示:一定要实名认证后才可以使用,使用支付宝实名认证很快也很简单登录后我们就可以开始操作了。添加产品点击公共用例后就会跳转到添加产品界面,如下图所

    2022年10月23日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号