判断完全二叉树

判断完全二叉树完全二叉树的定义:一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。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)


相关推荐

  • pycharm 修改镜像源_如何设置linux服务器镜像源

    pycharm 修改镜像源_如何设置linux服务器镜像源由于国外的镜像源安装Python速度较慢,选择国内的镜像速度较快,这篇文章如要讲述如何设置国内镜像源。常用镜像源:清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/方法一:…

  • css3动画特效_css3动画效果大全

    css3动画特效_css3动画效果大全CSS3为我们带来了令人惊叹的新特性,而最有趣的就是CSS动画。今天彬Go向大家推荐这50个CSS动画集合可以让你通过使用JavaScript函数来让动画更生动。为了能够预览到这些惊人的CSS3技术带

  • java 中高级面试题_Java中高级面试题

    java 中高级面试题_Java中高级面试题一.基础知识:1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet);2)HashMap的底层实现,之后会问ConcurrentHashMap的底层实现;3)如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;4)HashTable和ConcurrentHashMap的区别;5)Strin…

  • 武汉java公司排名_武汉十大it培训机构

    武汉java公司排名_武汉十大it培训机构说起Java大家一定不陌生,毕竟Java这几年通过互联网+理念慢慢的渗透到了各大行业中,现在的Java软件开发岗位尤为火爆。同时也吸引着不少年轻人选择通过Java培训加入到行业中,在武汉,Java培训机构也是不少,想要在其中选择一家适合自己的是不太简单的,在这里,排名榜小编作为一名IT行业的观察者,从课程设计、教师资质、就业等多方面对武汉Java培训机构进行了一系列的考察和筛选,得到了如下武汉Java培训机构排名榜单,排名结果仅供大家参考:1.武汉动力节点上榜理由:我相信大家对于动力节点的.

  • android点滴之标准SD卡状态变化事件广播接收者的注冊「建议收藏」

    android点滴之标准SD卡状态变化事件广播接收者的注冊

  • pta 列车调度_数据结构/PTA-列车调度/栈/数组

    pta 列车调度_数据结构/PTA-列车调度/栈/数组火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N(2≤…

发表回复

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

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