`
MoonMonster
  • 浏览: 36603 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

二叉树的层序创建及一些基本操作

阅读更多
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"));
	}
}



当初写这个时还没养成写注释的习惯,不过代码都不难理解,稍微看下都可以看懂。
2
1
分享到:
评论
2 楼 MoonMonster 2015-10-15  
purple12 写道
看着不错哦!

我笔记都是记在为知笔记中,只需要自己看懂就好,所以这个是直接复制过来的。。。没注释是硬伤。
1 楼 purple12 2015-10-15  
看着不错哦!

相关推荐

    二叉树层序遍历-实现代码-队列

    /* 设栈元素为二叉树的指针类型 */ typedef struct { QElemType *base; int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; ...

    二叉树 层序遍历 java实现 课程设计

    在Java编程中,理解并能够实现二叉树的各种操作是必要的技能之一。本次课程设计的重点是二叉树的层序遍历,这是一种遍历二叉树的方法,按照从上至下、从左到右的顺序访问每一层的节点。 层序遍历通常使用队列...

    树和二叉树-层序遍历二叉树 

    层序遍历二叉树的算法可以分为三步:首先,建立二叉树的链表存储结构;其次,利用队列完成算法;最后,在终端屏幕上打印出层序序列。 在给定的代码中,我们定义了一个二叉树的链表存储结构BiThreTree,它包含了指针...

    二叉树基本操作(层序遍历、树形输出)

    1.建立二叉树 2.树形输出 3.广义表形输出 4.判断是否为空树 5.求树的深度 6.插入孩子结点 7.删除孩子结点 8.取出根结点 9.取双亲结点 10.取左孩子结点 11.取右孩子结点 12.取左兄弟 13.取右兄弟 14.先序遍历 15.中序...

    二叉树的基本运算

    建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列; 3. 求二叉树的深度/结点数目...

    二叉树的基本操作,前序遍历,中序遍历,后序遍历,层序遍历

    本篇将详细介绍二叉树的基本操作,包括前序遍历、中序遍历、后序遍历以及层序遍历。 **1. 二叉树的基本操作** 二叉树的基本操作主要包括创建、插入、删除节点以及遍历等。创建二叉树时,需要指定根节点,之后通过...

    完全二叉树的层序遍历.pdf

    完全二叉树的层序遍历这里使用一个队列来辅助层序遍历二叉树。...```这里先创建一个完全二叉树,然后调用层序遍历函数对其进行层序遍历。以上是完全二叉树的层序遍历的实现示例。你可以根据需要进行适当的修改和扩展。

    二叉树的层序创建和后续遍历(代码实现)

    [一段可以运行的代码]二叉树的层序创建和后续遍历。 代码一共涉及涉及二叉树、队列、堆栈。二叉树和堆栈采用链表实现,队列采用数组实现。 二叉树本身用链表表示,链表每个节点有3个字段,其中2个是左右指针。 ...

    建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)

    二叉树是一种重要的数据结构,它由节点组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树常用于构建搜索、排序、...这些基本操作构成了二叉树操作的核心,为解决更复杂的计算机科学问题奠定了基础。

    二叉树实验三 二叉树的综合操作

    根据给定的文件信息,我们可以总结出以下关于“二叉树实验三 二叉树的综合操作”的相关知识点: ### 一、实验性质与要求 #### 实验性质 本实验为综合性实验,旨在通过实际编程操作来加深对二叉树理论的理解。 ###...

    二叉树的基本操作Visual Studio

    二叉树的基本操作,包括创建、查找结点数、双亲结点数、查找祖先、双亲、左右孩子、层序遍历

    二叉树(递归非递归层序)遍历报告

    在这个报告中,我们关注的是如何利用先序序列建立二叉树,并在建立的二叉树上执行不同类型的遍历:递归遍历(先序、中序、后序)、非递归遍历(先序、中序、后序)以及层序遍历。 首先,我们需要理解二叉树的基本...

    C++创建二叉树及操作

    ### C++创建二叉树及操作详解 #### 一、二叉树的定义与结构 ...以上内容详细介绍了如何使用C++实现二叉树的基本操作,包括创建、遍历、计算深度和叶子节点数量等。这些基础知识对于理解更复杂的二叉树算法非常重要。

    建立二叉树,层序、中序遍历

    适合毕业设计的同学用,数据结构 二叉树遍历,层序、中序遍历,课程设计做的,绝对能帮大家

    二叉树的建立及操作

    通过实践这些基本操作,你可以更好地理解二叉树的逻辑和用途,这对于学习算法和数据结构至关重要。在实际应用中,二叉树广泛应用于文件系统、编译器符号表、表达式树以及各种搜索和排序算法。熟练掌握二叉树的建立和...

    二叉树的层序遍历1

    二叉树的层序遍历是一种遍历二叉树的方法,它按照从上至下、从左至右的顺序逐层访问每个节点。这种遍历方式在处理二叉树问题时非常常见,特别是在需要按层次处理节点的问题中,如寻找二叉树的层次直径或计算每一层...

    数据结构程序二叉树的建立

    该程序实现了二叉树的建立、层序遍历和中序遍历三个功能。 首先,程序定义了二叉树结点的类型为字符型,并规定了结点个数不超过10个。然后,程序使用malloc函数动态分配内存,创建二叉树结点。在CreateBiTree函数中...

    二叉树_二叉树遍历_

    1.二叉树的基本操作实现【问题描述】建立一棵二叉树,用递归方法实现二叉树的如下基本操作:(1)按先序序列构造一棵二叉链表表示的二叉树T;(2)对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出...

    先序创建二叉树,并且层次遍历

    ### 数据结构知识点:先序创建二叉树及层次遍历 #### 一、知识点概述 在计算机科学领域,数据结构是研究如何组织和存储数据的关键技术之一。其中,二叉树作为一种基本的数据结构,在实际应用中有着广泛的应用场景...

Global site tag (gtag.js) - Google Analytics