package BiTree_5;
/**
* @author MoonMonster
* @date 2015-9-21 下午09:46:48
*/
//节点
public class Node {
Node leftChild;
Node rightChild;
Object element;
public Node(Object obj){
this.element = obj;
this.leftChild = null;
this.rightChild = null;
}
public Node(){
this.leftChild = null;
this.rightChild = null;
}
}
package BiTree_5;
import java.util.Scanner;
import java.util.Stack;
/**
* @author MoonMonster
* @date 2015-9-22 下午06:28:19
*/
public class Tree {
// 根节点
Node root;
public Tree() {
root = null;
}
// 层序创建树
public void builderTree() {
Node[] tree = new Node[100];
Scanner sc = new Scanner(System.in);
String str = "";
int index = 0;
while (true) {
Node temp = null;
str = sc.next();
if (str.equals("quit")) {
break;
}
if (root == null) {
root = new Node(str);
} else if (root.equals("null")) {
temp = null;
} else {
temp = new Node(str);
}
if (index == 0) {
tree[index] = root;
} else {
tree[index] = temp;
if (index % 2 == 0) {
tree[index / 2 - 1].rightChild = temp;
} else {
tree[index / 2].leftChild = temp;
}
}
index++;
}
}
// 前序递归输出
public void print(Node temp) {
if (temp != null) {
System.out.print(temp.element + " ");
print(temp.leftChild);
print(temp.rightChild);
}
}
// 数叶节点数量
public int countLeaves(Node temp) {
int count = 0;
if (temp != null) {
if (temp.leftChild == null && temp.rightChild == null) {
count++;
}
count += countLeaves(temp.leftChild);
count += countLeaves(temp.rightChild);
}
return count;
}
// 数节点数目
public int countNode(Node temp) {
int count = 0;
if (temp != null) {
count++;
count += countNode(temp.leftChild);
count += countNode(temp.rightChild);
}
return count;
}
// 非递归前序遍历--1
public void preTraverse(Node temp) {
Stack<Node> stack = new Stack<Node>();
if(temp != null){
stack.push(temp);
while(!stack.empty()){
temp = stack.pop();
System.out.print(temp.element);
if(temp.rightChild != null){
stack.push(temp.rightChild);
}
if(temp.leftChild != null){
stack.push(temp.leftChild);
}
}
}
System.out.println();
}
//非递归前序遍历--2
public void preTraverse_2(Node temp){
Stack<Node> stack = new Stack<Node>();
if(temp == null){
System.out.println("空树");
return ;
}
while(temp != null || !stack.empty()){
while(temp != null){
System.out.print(temp.element);
stack.push(temp);
temp = temp.leftChild;
}
temp = stack.pop();
temp = temp.rightChild;
}
}
//中序非递归遍历
public void inTraverse(Node temp){
Stack<Node> stack = new Stack<Node>();
if(temp == null){
System.out.println("空树。");
return ;
}
while(temp!=null || !stack.empty()){
while(temp != null){
stack.push(temp);
temp = temp.leftChild;
}
temp = stack.pop();
System.out.print(temp.element);
temp = temp.rightChild;
}
}
//判断树中是否存在某个元素
public boolean indexOf(Node temp,Object obj){
boolean result = false;
if(temp != null){
if(temp.element.equals(obj)){
result = true;
return result;
}
result = indexOf(temp.leftChild,obj);
if(result == true){
return result;
}
result = indexOf(temp.rightChild,obj);
}
return result;
}
//判断树中有多少个指定数据
public int countObject(Node temp, Object obj){
int count = 0;
if(temp != null){
if(temp.element.equals(obj)){
count ++;
}
count += countObject(temp.leftChild,obj);
count += countObject(temp.rightChild,obj);
}
return count;
}
}
package BiTree_5;
/**
* @author MoonMonster
* @date 2015-9-22 下午06:43:08
*/
public class TreeTest {
public static void main(String[] args) {
Tree tree = new Tree();
tree.builderTree();
// System.out.println(tree.root.element);
// tree.preTraverse(tree.root);
// System.out.println(tree.countLeaves(tree.root));
// System.out.println(tree.countNode(tree.root));
// tree.preTraverse_2(tree.root);
// tree.inTraverse(tree.root);
// System.out.println(tree.indexOf(tree.root, "A"));
// System.out.println(tree.countObject(tree.root, "A"));
}
}
当初写这个时还没养成写注释的习惯,不过代码都不难理解,稍微看下都可以看懂。
分享到:
相关推荐
/* 设栈元素为二叉树的指针类型 */ typedef struct { QElemType *base; int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; ...
在Java编程中,理解并能够实现二叉树的各种操作是必要的技能之一。本次课程设计的重点是二叉树的层序遍历,这是一种遍历二叉树的方法,按照从上至下、从左到右的顺序访问每一层的节点。 层序遍历通常使用队列...
层序遍历二叉树的算法可以分为三步:首先,建立二叉树的链表存储结构;其次,利用队列完成算法;最后,在终端屏幕上打印出层序序列。 在给定的代码中,我们定义了一个二叉树的链表存储结构BiThreTree,它包含了指针...
1.建立二叉树 2.树形输出 3.广义表形输出 4.判断是否为空树 5.求树的深度 6.插入孩子结点 7.删除孩子结点 8.取出根结点 9.取双亲结点 10.取左孩子结点 11.取右孩子结点 12.取左兄弟 13.取右兄弟 14.先序遍历 15.中序...
建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列; 3. 求二叉树的深度/结点数目...
本篇将详细介绍二叉树的基本操作,包括前序遍历、中序遍历、后序遍历以及层序遍历。 **1. 二叉树的基本操作** 二叉树的基本操作主要包括创建、插入、删除节点以及遍历等。创建二叉树时,需要指定根节点,之后通过...
完全二叉树的层序遍历这里使用一个队列来辅助层序遍历二叉树。...```这里先创建一个完全二叉树,然后调用层序遍历函数对其进行层序遍历。以上是完全二叉树的层序遍历的实现示例。你可以根据需要进行适当的修改和扩展。
[一段可以运行的代码]二叉树的层序创建和后续遍历。 代码一共涉及涉及二叉树、队列、堆栈。二叉树和堆栈采用链表实现,队列采用数组实现。 二叉树本身用链表表示,链表每个节点有3个字段,其中2个是左右指针。 ...
二叉树是一种重要的数据结构,它由节点组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树常用于构建搜索、排序、...这些基本操作构成了二叉树操作的核心,为解决更复杂的计算机科学问题奠定了基础。
根据给定的文件信息,我们可以总结出以下关于“二叉树实验三 二叉树的综合操作”的相关知识点: ### 一、实验性质与要求 #### 实验性质 本实验为综合性实验,旨在通过实际编程操作来加深对二叉树理论的理解。 ###...
二叉树的基本操作,包括创建、查找结点数、双亲结点数、查找祖先、双亲、左右孩子、层序遍历
在这个报告中,我们关注的是如何利用先序序列建立二叉树,并在建立的二叉树上执行不同类型的遍历:递归遍历(先序、中序、后序)、非递归遍历(先序、中序、后序)以及层序遍历。 首先,我们需要理解二叉树的基本...
### C++创建二叉树及操作详解 #### 一、二叉树的定义与结构 ...以上内容详细介绍了如何使用C++实现二叉树的基本操作,包括创建、遍历、计算深度和叶子节点数量等。这些基础知识对于理解更复杂的二叉树算法非常重要。
适合毕业设计的同学用,数据结构 二叉树遍历,层序、中序遍历,课程设计做的,绝对能帮大家
通过实践这些基本操作,你可以更好地理解二叉树的逻辑和用途,这对于学习算法和数据结构至关重要。在实际应用中,二叉树广泛应用于文件系统、编译器符号表、表达式树以及各种搜索和排序算法。熟练掌握二叉树的建立和...
二叉树的层序遍历是一种遍历二叉树的方法,它按照从上至下、从左至右的顺序逐层访问每个节点。这种遍历方式在处理二叉树问题时非常常见,特别是在需要按层次处理节点的问题中,如寻找二叉树的层次直径或计算每一层...
该程序实现了二叉树的建立、层序遍历和中序遍历三个功能。 首先,程序定义了二叉树结点的类型为字符型,并规定了结点个数不超过10个。然后,程序使用malloc函数动态分配内存,创建二叉树结点。在CreateBiTree函数中...
1.二叉树的基本操作实现【问题描述】建立一棵二叉树,用递归方法实现二叉树的如下基本操作:(1)按先序序列构造一棵二叉链表表示的二叉树T;(2)对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出...
### 数据结构知识点:先序创建二叉树及层次遍历 #### 一、知识点概述 在计算机科学领域,数据结构是研究如何组织和存储数据的关键技术之一。其中,二叉树作为一种基本的数据结构,在实际应用中有着广泛的应用场景...