此测试仅用于二叉树基本的性质测试,不包含插入、删除测试(此类一般属于有序树基本操作)。

//二叉树树类
public class BinaryTree { public TreeNode root; //有一个根节点
public static int index; public TreeNode CreateBTree(int[] a) {
TreeNode root = null;
if (a[index] != '#') {
root = new TreeNode(a[index]);
index++;
root.setLChild(CreateBTree(a));
index++;
root.setRChild(CreateBTree(a));
}
return root; } //先序遍历
public void prevOrder(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.getData() + ",");
prevOrder(root.getLChild());
prevOrder(root.getRChild());
} // 中序遍历
public void midOrder(TreeNode root) {
if (root == null) {
return;
}
midOrder(root.getLChild());
System.out.print(root.getData() + ",");
midOrder(root.getRChild());
} // 后序遍历
public void postOrder(TreeNode root) {
if (root == null) {
return;
}
postOrder(root.getLChild());
postOrder(root.getRChild());
System.out.print(root.getData() + ",");
} // 获取树大小
private int getSize(TreeNode node) {
if (node == null) {
return 0;
} else {
return 1 + getSize(node.leftChild) + getSize(node.rightChild);
}
} /*求二叉树的高*/
public int getHeight() {
return getHeight(this.root);
} private int getHeight(TreeNode node) {
if (node != null) { //左子树和右子树中谁大返回谁
int i = getHeight(node.leftChild);
int j = getHeight(node.rightChild);
return (i > j) ? i + 1 : j + 1;
} else {
return 0;
}
} //获得叶子数
public int getLeaf(TreeNode node) {
if (node == null) {
return 0;
}
if (node.leftChild == null && node.rightChild == null) {
System.out.println("Leaf node: " + node.getData());
return 1;
} else {
return getLeaf(node.leftChild) + getLeaf(node.rightChild);
} } //获得第K层节点数
public int getNodeKNum(TreeNode node, int k) {
if (k == 1) {
if (node == null)
return 0;
System.out.println("K Node:" + node.getData());
return 1;
}
return getNodeKNum(node.getLChild(), k - 1) + getNodeKNum(node.getRChild(), k - 1);
} //查找某个节点
public TreeNode findNode(int data) {
return findNode(this.root, data);
} public TreeNode findNode(TreeNode node, int data) {
if (node == null) {
return null;
} else if (node.getData() == data) {
return node;
}
TreeNode leftNode = findNode(node.getLChild(), data);
if (null != leftNode)
return leftNode;
TreeNode rightNode = findNode(node.getRChild(), data);
if (null != rightNode)
return rightNode;
return null;
} //返回某节点的父节点
public TreeNode getParent(int data) {
return getParent(this.root, data);
} public TreeNode getParent(TreeNode node, int data) {
if (node == null)
return null;
TreeNode childL = node.getLChild();
TreeNode childR = node.getRChild();
if ((childL != null && childL.getData() == data) || childR != null && childR.getData() == data)
return node;
TreeNode parentL = getParent(node.getLChild(), data);
if (parentL != null)
return parentL;
TreeNode parentR = getParent(node.getRChild(), data);
if (parentR != null)
return parentR;
return null;
} //层次遍历,用到队列
public void BTreeLevelOrder() {
TreeNode root = this.root;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode pre = queue.poll();
list.add(pre);
if (pre.getLChild() != null)
queue.offer(pre.getLChild());
if (pre.getRChild() != null)
queue.offer(pre.getRChild());
}
Iterator<TreeNode> it = list.iterator();
while (it.hasNext()) {
TreeNode cur = it.next();
System.out.print(cur.getData() + ", ");
}
} //判断一棵树是否是完全二叉树(层次遍历的变形)
public boolean isCompleteBTree() {
TreeNode root = this.root;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root); while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node == null)
break;
queue.offer(node.getLChild());
queue.offer(node.getRChild()); }
while (!queue.isEmpty()) {
TreeNode cur = queue.poll();
if (cur != null)
return false;
}
return true; } class TreeNode {
private TreeNode leftChild;
private TreeNode rightChild;
private int data; public TreeNode(int data) {
this.data = data;
} public void setLChild(TreeNode left) {
this.leftChild = left;
} public void setRChild(TreeNode right) {
this.rightChild = right;
} public void setData(int data) {
this.data = data;
} public int getData() {
return this.data;
} public TreeNode getLChild() {
return this.leftChild;
} public TreeNode getRChild() {
return this.rightChild;
}
} public static void main(String[] agrs) {
BinaryTree tree = new BinaryTree();
int[] a = new int[]{1, 2, 3, '#', '#', 4, '#', '#', 5, 6, '#', '#', '#'};
// int[] a = new int[]{1, 2, '#', 3, '#', '#', 4, '#', 5, 6, '#', '#', '#'};
// 1
// / \
// 2 5
// / \ / \
// 3 4 6 #
// / \ / \ / \
// # # # # # #
tree.root = tree.CreateBTree(a);
System.out.print("先序遍历:");
tree.prevOrder(tree.root);
System.out.print("\n中序遍历:");
tree.midOrder(tree.root);
System.out.print("\n后序遍历:");
tree.postOrder(tree.root);
System.out.println(); System.out.println("Tree size Num: " + tree.getSize(tree.root));
System.out.println("Tree Leaf Num: " + tree.getLeaf(tree.root));
System.out.println("K=2 num: " + tree.getNodeKNum(tree.root, 2));
System.out.println("Tree height: " + tree.getHeight()); System.out.println("3 find: " + tree.findNode(3).getData());
System.out.println("1 find: " + tree.findNode(1).getData());
System.out.println("6 find: " + tree.findNode(6).getData());
System.out.println("7 find: " + tree.findNode(7)); System.out.println("6 parent node is : " + tree.getParent(6).getData());
System.out.println("3 paren node is : " + tree.getParent(3).getData());
System.out.println("5 paren node is : " + tree.getParent(5).getData());
System.out.println("1 paren node is : " + tree.getParent(1));
System.out.print("层序遍历:");
tree.BTreeLevelOrder();
System.out.println(); System.out.println("the tree is complete? " + tree.isCompleteBTree()); }
}

二叉树BinaryTree构建测试(无序)的更多相关文章

  1. 软件测试之构建测试---BVT

    1. 构建的基本流程: a. 开发人员在他们的个人计算机上编写源代码文件 b. 他们将编写好的文件存放在一个统一集中的地方,构建组将所有的源代码编译成可以在计算机上运行的二进制文件,且用安装工具把各种 ...

  2. java实现二叉树的构建以及3种遍历方法

    转载自http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿 ...

  3. docker构建测试环境

    构建测试环境首先要根据自己的需求,构建出适合自己项目的image,有了自己的image,就可以快速的搭建出来一套测试环境了. 下边就说一下构建image的两种方式. 1.DOCKFILE创建文件夹:m ...

  4. Java 实现二叉树的构建以及3种遍历方法

    转载自http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿 ...

  5. java实现二叉树的构建以及3种遍历方法(转)

    转 原地址:http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历 ...

  6. Maven创建Web工程并执行构建/测试/打包/部署

    创建工程基本参考上一篇Java Application工程,不同的是命令参数变了,创建Web工程的命令如下: mvn archetype:generate -DgroupId=com.jsoft.te ...

  7. Maven的构建/测试/打包

    继上一篇http://www.cnblogs.com/EasonJim/p/6809882.html使用Maven创建工程后,接下来是使用Maven进行构建/测试/打包. 在打包之前,先熟悉一下Mav ...

  8. 数据结构之二叉树的构建C++版

    二叉树的构建要注意与链式表的区别,二叉树这里的构建十分低级,每个树只是构建了一个单一的二叉树节点,总体来看是有下向上构建的.用户需要手动去构建自己需要的树,而不是直接去插入数据就到二叉树中了,因为不是 ...

  9. @vue/cli3+配置build命令构建测试包&正式包

    上一篇博客介绍了vue-cli2.x配置build命令构建测试包和正式包,但现在前端开发vue项目大多数使用新版@vue/cli脚手架搭建vue项目(vue create project-name) ...

随机推荐

  1. Qt编写控件属性设计器7-串口采集

    一.前言 数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口.网络.数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示. ...

  2. iOS 将一个UIImage缩放到指定Size

    这方法挺实用的,直接调用就可以得到想要的size. //将一个UIImage缩放变换到指定Size -(UIImage*) OriginImage:(UIImage *)image scaleToSi ...

  3. LeetCode_110. Balanced Binary Tree

    110. Balanced Binary Tree Easy Given a binary tree, determine if it is height-balanced. For this pro ...

  4. VCL组件之TPanel

    TPanel位于Standard组件面板上,也是常用的一种容器控件.面板的一个优点就是放在面板上的组件称为面板的一部分,因此它们与面板一起移动.这在设计阶段很有用. Panel组件的大部分功能在于其A ...

  5. 最新 梦网科技java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.梦网科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了梦网科技.6.7月主要是做系统复习.项目复盘.Leet ...

  6. Go之接口interface(1)

    1. 什么是interface在此之前,我们遇到的都是具体的类型,比如数字类型.切片类型等等.对于这些具体的类型,我们总是能知道它是什么.可以利用它来做什么,比如对于一个数字类型,我们知道可以对其进行 ...

  7. 读取json数据封装

    前言:做自动化常用公共方法 import json class ReadJson(): def __init__(self): self.data = self.read_data() #读取JSON ...

  8. zabbix 批量添加web场景监控

    公司有大量测试环境的url需要监控是否能够访问,即url状态不为200即报警.状态为200即正常.因url比较多,且经常发生改变,如通过web场景配置(我没配过)会比较繁琐,工作量比较大.通过网上查找 ...

  9. SQL-锁-事物级别

    一.锁 锁是一种安全机制,控制并发操作,防止用户读取其他用户正在更改的数据,或者多用户同时修改一个数据,从而保证事物的完整性和数据库的一致性.SQLserver 会自动强制执行锁,但是用户可以通过对锁 ...

  10. mssql sqlserver时间戳与时间格式互相转换的方法分享

    转自: http://www.maomao365.com/?p=9336 摘要: 下文讲述mssql中时间戳和时间格式的转换方法,如下所示: 实验环境:sql server 2008 R2 时间戳简介 ...