- 浏览: 1230383 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
using System;
using System.Collections.Generic;
using System.Text;
namespace binaryTree
{
class Program
{
static void Main(string[] args)
{
//用户操作
}
}
//定义: 二叉树的存储结构类
public class Node<T>
{
private T data; //数据域
private Node<T> lChild; //左孩子
private Node<T> rChild; //右孩子
//构造器
public Node(T val, Node<T> lp, Node<T> rp)
{
data = val;
lChild = lp;
rChild = rp;
}
//构造器
public Node(Node<T> lp, Node<T> rp)
{
data = default(T);
lChild = lp;
rChild = rp;
}
//构造器
public Node(T val)
{
data = val;
lChild = null;
rChild = null;
}
//构造器
public Node(T val)
{
data = default(T);
lChild = null;
rChild = null;
}
//数据属性
public T Data
{
get
{
return data;
}
set
{
data = value;
}
}
//左孩子属性
public Node<T> LChild
{
get
{
return lChild;
}
set
{
lChild = value;
}
}
//右孩子属性
public Node<T> RChild
{
get
{
return rChild;
}
set
{
rChild = value;
}
}
}
//不带头结点的二叉树的二叉链表的类 BiTree<T>
public class BiTree<T>
{
private Node<T> head; //头引用
//构造器
public BiTree()
{
head = null;
}
//构造器
public BiTree(T val)
{
Node<T> p = new Node<T>(val);
head = p;
}
//构造器
public BiTree(T val, Node<T> lp, Node<T> rp)
{
Node<T> p = new Node<T>(val, lp, rp);
head = p;
}
//头引用属性
public Node<T> Head
{
get
{
return head;
}
set
{
head = value;
}
}
//判断是否是空二叉树
public bool IsEmpty()
{
if (head == null)
{
return true;
}
else
{
return false;
}
}
//获取根结点
public Node<T> Root()
{
return head;
}
//获取结点的左孩子结点
public Node<T> GetLChild(Node<T> p)
{
return p.LChild;
}
//获取结点的右孩子结点
public Node<T> GetRChild(Node<T> p)
{
return p.RChild;
}
//将结点p的左子树插入值为 val的新结点.
//原来的左子树成为新结点的左子树.
public void InsertL(T val, Node<T> p)
{
Node<T> tmp = new Node<T>(val);
tmp.LChild = p.LChild; //原来的左子树成为新结点的左子树.
p.LChild = tmp; //p的左子孩子为新结点.
}
//将结点p的右子树插入值为 val的新结点,
//原来的右子树成为新结点的右子树.
public void InsertR(T val, Node<T> p)
{
Node<T> tmp = new Node<T>(val);
tmp.RChild = p.RChild; //原来的右子树成为新结点的右子树
p.RChild = tmp; //p的右孩子为新结点
}
//若 p 非空, 删除 p 的左子树
public Node<T> DeleteL(Node<T> p)
{
if(( p==null || (p.LChild==null))
{
return null;
}
Node<T> tmp = p.LChild;
p.LChild=null;
return tmp;
}
//若 p 非空, 删除 p 的右子树
public Node<T> DeleteR(Node<T> p)
{
if ((p == null) || (p.RChild == null))
{
return null;
}
Node<T> tmp = p.RChild;
p.RChild = null;
return tmp;
}
//判断是否是叶子结点
public bool IsLeaf(Node<T> p)
{
if ((p != null) && (p.LChild == null) && (p.RChild == null))
{
return true;
}
else
{
return false;
}
}
//树的遍历: 由于树的定义是递归的, 所以遍历算法也彩递归实现
//原始顺序为: A B C D E F G H I J (原则是 从小到下, 从左到右)
//1.先序遍历(DLR), 思想是: 首先访问根结点, 然后先序遍历其左子树, 最后先遍历其右子树.
//结果是: A B D H I E J C F G
public void PreOrder(Node<T> root)
{
//根结点为空
if (root == null)
{
return;
}
//第一步: 处理根结点
Console.WriteLine("{0}", root.Data);
//第二步: 遍历左子树
PreOrder(root.LChild);
//第三步: 遍历右子树
PreOrder(root.RChild);
}
//中序遍历(LDR), 思想是: 首先中序遍历结点的左子树, 然后访问根结点, 最后中序遍历其右子树
//结果为: H DI B E J E A F C G
public void InOrder(Node<T> root)
{
//根结点为空
if (root == null)
{
return;
}
//中序遍历左子树
InOrder(root.LChild);
//处理根结点,注: 这时的根结点指每一个可以作为父结点的结点.
Console.WriteLine("{0}", root.Data);
//中序遍历右子树.
InOrder(root.RChild);
}
//后序遍历(LRD): 基本思想是: 首先遍历根结点的左子树, 然后后后序遍历根结点的右子树, 最后访问根结点
//结果为: H I D J E B F G C A
public void PostOrder(Node<T> root)
{
//根结点为空
if (root == null)
{
return;
}
//后序遍历左子树
PostOrder(root.LChild);
//后序遍历右子树
PostOrder(root.RChild);
//处理根结点
Console.WriteLine("{0}", root.Data);
}
//(4).层序遍历(Level Order)
//思想: 由于层次遍历结点的顺序是 先遇到的结点先访问, 与队列操作的顺序相同.
//所以, 在进行层次遍历时, 设置一个队列, 将根结点引用入队, 当队列非空时, 循环执行以下三步:
//(1).从队列中取出一个结点引用, 并访问该结点.
//(2).若该结点的左子树非空, 将该结点的左子树引用入队;
//(3).若该结点的右子树非空, 将该结点的右子树引用入队;
public void LevelOrder(Node<T> root)
{
//根结点为空
if (root == null)
{
return;
}
//设置一个队列保存层序遍历的结点
//...此处需要引用到队列的定义类与操作类, 暂略.
}
}
}
发表评论
-
排序算法与查找算法
2014-09-01 10:17 382八大排序算法: http://blog.csdn.net ... -
用递归与非递归实现斐波拉希数列
2013-05-15 00:46 1906如下: package com.test; publ ... -
利用LinkedList制作一个栈
2012-12-19 21:55 877import java.util.LinkedList; ... -
递归问题求解学习一
2009-04-22 14:12 721http://blog.csdn.net/lixiaoshan ... -
算术逻辑推理学习
2009-04-23 15:52 987数字推理考察的是对 ... -
由递归所想到的:如何将字符串或者数字转换成大写货币的问题
2009-04-24 11:54 1224这个问题同事在面试的时候遇到过,最近在看有关递归的问题时 h ... -
数据结构基础--排序: 各种排序算法全分析
2009-05-06 11:35 1455http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(基数分配排序法)
2009-05-06 11:41 1082http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(箱分配排序)
2009-05-06 11:43 919http://www.cnblogs.com/ziyiFly/ ... -
数据结构-排序: 两路归并排序算法
2009-05-06 11:44 1738数据结构-排序: 两路归 ... -
数据结构-排序: 插入排序(直接插入排序法)
2009-05-06 11:45 1201数据结构-排序: 插入排 ... -
数据结构-算法: 插入排序(希尔排序法)
2009-05-06 11:45 1457数据结构-算法: 插入排 ... -
数据结构-排序: 交换排序(快速排序法)
2009-05-06 11:46 1473数据结构-排序: 交换排序(快速排序法) 1、算法思想 ... -
数据结构-排序: 选择排序(堆选择排序法)
2009-05-06 11:47 913数据结构-排序: 选择排 ... -
数据结构-排序: 交换排序(冒泡排序法)
2009-05-06 11:47 1038数据结构-排序: 交换排序(冒泡排序法) 冒泡排序(Bu ... -
数据结构-排序: 选择排序(直接选择排序法)
2009-05-06 11:48 976数据结构-排序: 选择排序(直接选择排序法) 直接选择排 ... -
C#实现--单链表(链式)
2009-05-06 11:49 1392C#实现--单链表(链式) using Syste ... -
JAVA排序类汇总
2009-05-06 11:54 1216package com.softeem.jbs.lesson4 ... -
谈谈防 SQL 注入式攻击策略
2009-05-07 09:30 1421谈谈防 SQL 注入式攻击 ... -
二进制数转换为八进制, 十六进制数的算法
2009-05-07 09:44 1305using System; using System.Col ...
相关推荐
就是一个 简单的 二叉树的建立及前中后序遍历的 代码
在计算机科学中,二叉树遍历是访问二叉树所有节点的一种方法,通常分为三种主要类型:前序遍历、中序遍历和后序遍历。这些遍历方法在解决许多问题时非常有用,如搜索、排序、表达式求值等。本文将详细介绍这三种遍历...
本项目旨在通过用户输入构建二叉树,并实现层次遍历、先序遍历、中序遍历和后序遍历四种常见的遍历方法。其中,至少有一种遍历方式需使用非递归的方式实现。 首先,我们需要定义一个二叉树节点类,包含节点值、左子...
总的来说,这个实验涵盖了二叉树的基础知识,包括二叉链表存储结构、二叉树的构造、以及三种遍历方法的递归和非递归实现。通过这个实验,你可以巩固理论知识,提高编程能力,为后续的高级数据结构和算法学习打下坚实...
### 二叉树的遍历方法与递归实现详解 #### 一、二叉树的遍历概述 二叉树的遍历是计算机科学中一个基础而重要的概念,它涉及到了对二叉树结构的系统访问策略。遍历的目的在于确保二叉树中的每一个节点都能够被访问...
接下来,我们实现了四种不同的遍历方法: 1. **先序遍历**(PreOrder):首先访问根节点,然后按照先序遍历左子树,最后遍历右子树。先序遍历的顺序是:根-左-右。在C#代码中,我们通过递归调用`PreOrder<T>`函数...
这些遍历方法在实现时都遵循特定的访问顺序。 1. 前序遍历(根-左-右): ```csharp void PreOrderTraversal(TreeNode<T> node) { if (node != null) { Console.Write(node.Value + " "); PreOrderTraversal...
- **前序、中序、后序遍历**:这三种遍历方法是二叉树计算的基础,可用于计算节点值、打印树结构、执行特定操作等。前序遍历是根-左-右,中序是左-根-右,后序是左-右-根。 - **树的高度、宽度、路径和路径长度**...
在C#中,我们可以定义一个二叉树节点类,包含值、左子节点和右子节点的引用,然后实现以上三种遍历方法。遍历方法对于理解和操作二叉树至关重要,例如在构建表达式树、搜索和排序等任务中。 二叉树的基本运算还包括...
二叉树遍历是理解和操作二叉树的关键技能,通常包括三种主要的递归方法:前序遍历、中序遍历和后序遍历,以及一种非递归方法——层次遍历。本资源"遍历二叉树的4个非递归算法.rar"提供了C#语言实现的这四种非递归...
二叉树的遍历是访问树中所有节点的过程,通常有三种遍历方式:前序遍历、中序遍历和后序遍历。 **后序遍历:** 后序遍历遵循“左-右-根”的顺序,即首先遍历左子树,然后遍历右子树,最后访问根节点。这种遍历方式...
线索二叉树是一种特殊的二叉树数据结构,它在二叉链表的基础上增加了线索,用于在非递归情况下实现前序、中序和后序遍历。这种数据结构在计算机科学中尤其在算法和数据结构的学习中具有重要意义,因为它允许我们高效...
递归中序遍历是二叉树遍历的一种常见方法。它遵循以下步骤: 1. 如果当前节点为空,则返回。 2. 首先递归遍历左子树。 3. 访问当前节点。 4. 最后递归遍历右子树。 递归中序遍历的核心在于其分治策略,将问题分解为...
本篇文章将深入探讨二叉树的前序遍历、中序遍历和后序遍历这三种主要的遍历方法,并结合C#编程语言进行实现。 1. **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。在C#中,可以使用递归或栈来实现...
二叉树遍历是二叉树操作的核心部分,主要包括前序遍历、中序遍历和后序遍历三种方式。下面我们将详细探讨这三种遍历方法以及如何在C#控制台程序中实现它们。 1. 前序遍历(根-左-右): 前序遍历的顺序是首先访问根...
为了实现上述目标,需要设计一种适合存储二叉树的数据结构。通常情况下,二叉树可以通过链式存储结构来表示,即每个节点包含两个指针域(左子树和右子树)和一个数据域。本实验中,节点的数据域选择字符类型,这意味...
本项目就是这样一个示例,通过C#实现二叉树的动态绘制,帮助用户理解和分析二叉树的形态。 首先,我们要了解二叉树的基本概念。二叉树是由节点(或称为顶点)和边构成的图,每个节点最多有两个子节点,通常称为左子...
在C#编程中,二叉树是一种非常重要的数据结构,常用于实现各种算法,如搜索、排序等。本文将深入探讨二叉树的前序、中序和后序遍历,以及如何在C#控制台程序中实现这些操作。通过自定义二叉树的结构,我们可以灵活地...
这里我们将深入探讨这两种数据结构及其C#实现。 首先,二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树的主要操作包括插入、删除和查找。在二叉搜索树(BST,...
在C#编程中,二叉树是一种非常重要的数据结构,常用于实现各种算法和数据组织。二叉树的遍历是其操作的核心部分,通常包括前序遍历、中序遍历和后序遍历。这三种遍历方式各有特点,可以按照不同的顺序访问树中的每个...