判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树
package class_04;import java.util.LinkedList;
import java.util.Queue;
/*** * 判断一棵树是否是搜索二叉树* 判断一棵树是否是完全二叉树**/
public class Code_07_IsBSTAndCBT {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}//判断一棵树是否是搜索二叉树public static boolean isBST(Node head) {if (head == null) {return true;}boolean res = true;Node pre = null;Node cur1 = head;Node cur2 = null;while (cur1 != null) {cur2 = cur1.left;if (cur2 != null) {while (cur2.right != null && cur2.right != cur1) {cur2 = cur2.right;}if (cur2.right == null) {cur2.right = cur1;cur1 = cur1.left;continue;} else {cur2.right = null;}}if (pre != null && pre.value > cur1.value) {res = false;}pre = cur1;cur1 = cur1.right;}return res;}//判断一棵树是否是完全二叉树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;}// for test -- print treepublic static void printTree(Node head) {System.out.println("Binary Tree:");printInOrder(head, 0, "H", 17);System.out.println();}public static void printInOrder(Node head, int height, String to, int len) {if (head == null) {return;}printInOrder(head.right, height + 1, "v", len);String val = to + head.value + to;int lenM = val.length();int lenL = (len - lenM) / 2;int lenR = len - lenM - lenL;val = getSpace(lenL) + val + getSpace(lenR);System.out.println(getSpace(height * len) + val);printInOrder(head.left, height + 1, "^", len);}public static String getSpace(int num) {String space = " ";StringBuffer buf = new StringBuffer("");for (int i = 0; i < num; i++) {buf.append(space);}return buf.toString();}public static void main(String[] args) {Node head = new Node(4);head.left = new Node(2);head.right = new Node(6);head.left.left = new Node(1);head.left.right = new Node(3);head.right.left = new Node(5);printTree(head);System.out.println(isBST(head));System.out.println(isCBT(head));}
}
判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树相关推荐
- 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树
数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...
- 树和森林与二叉树的转换、树和森林的遍历
全部数据结构.算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360 树和森林转二叉树其实十分简单,我 ...
- 算法-判断一颗树是否是搜索二叉树
定义:(二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点 ...
- 如何判断一棵树是否是满二叉树
判断一棵树是否是满二叉树 1.满二叉树定义 2.如何判断一棵树是否是满二叉树 3.代码 1.满二叉树定义 除最后一层无子节点外,其他层的所有节点都有两个子节点的二叉树就是满二叉树.如下图所示: 2.如 ...
- 数据结构 -- 搜索二叉树
一.搜索二叉树 1.定义:它是一棵排序二叉树,可为空树. 2.性质: 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同: 左子树上所有节点的关键码(key)都小于根节点的关键码 ...
- 树,森林,二叉树的互相转换
树.森林到二叉树的转换 将树转换为二叉树 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟.按照这种关系很自然地就将树转换成相应的二叉树: 在所有兄弟结点之间加一连线 对每个结点,除了保留 ...
- 理论基础 —— 二叉树 —— 树、森林、二叉树的转换
[概述] 从树的孩子兄弟表示法和二叉树的二叉链表表示可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和右兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针. 因此,从物理结 ...
- 搜索二叉树之字典实现
利用搜索二叉树判断一个单词是否拼写正确: 假设把所有单词都按照搜索树的性质插入到搜索二叉树中,我们判断一个单词拼写是否正确就是在树中查找该单词是否存在(查找key是否存在). /*********** ...
- 八数码深度优先搜索_树的深度优先搜索(上)
还记得我们说迭代法的具体应用中的二分法吗?我们讨论了一个查字典的例子.如果要使用二分查找,我们首先要把整个字典排个序,然后每次都通过二分的方法来缩小搜索范围.不过在平时的生活中,咱们查字典并不是这么做 ...
最新文章
- python中正确的输入语句x、y=input_语句x=input()执行时,如果从键盘输入12并按回车键,则x的值是( )。_学小易找答案...
- 视频|立体视觉之立体匹配理论与实战
- python流程控制语句-python 流程控制语句
- 在打开的Web表单模态窗口中,避免点击服务端控件时弹出新窗口的技巧
- 第十三节:易学又实用的新特性:for...of
- 基于JAVA+SpringMVC+Mybatis+MYSQL的图书馆预约占座管理系统
- 3g造就了电商,4g推动了微商,5g物联网的时代,能够成就什么?
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
- CF991C Candies
- 图神经网络之Node2Vec详解
- 2023上海大学电气工程及其自动化考研必看上岸经验指导
- ecshop手机号码归属地
- linux python2升级到python3(源码编译安装)
- AcWing2279 网络战争 (01分数规划+网络流 最小割模型)
- P2404 自然数拆分问题
- NGR-PEG-IR825 肿瘤新生血管靶向肽NGR-聚乙二醇-近红外荧光染料IR825
- 大话西游猛击源码_我们猛击Return(Enter)键可能会演变的原因
- 手机管理服务器文件夹,手机查看云服务器文件夹
- 这些4K手机、电脑壁纸网站,你一定要知道
- 安装weblogic并部署jpress项目(fmw_14.1.1.0.0_wls_lite_quick_Disk1_1of1.zip)