- 浏览: 1205597 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 357八大排序算法: http://blog.csdn.net ... -
用递归与非递归实现斐波拉希数列
2013-05-15 00:46 1866如下: package com.test; publ ... -
利用LinkedList制作一个栈
2012-12-19 21:55 841import java.util.LinkedList; ... -
递归问题求解学习一
2009-04-22 14:12 696http://blog.csdn.net/lixiaoshan ... -
算术逻辑推理学习
2009-04-23 15:52 961数字推理考察的是对 ... -
由递归所想到的:如何将字符串或者数字转换成大写货币的问题
2009-04-24 11:54 1181这个问题同事在面试的时候遇到过,最近在看有关递归的问题时 h ... -
数据结构基础--排序: 各种排序算法全分析
2009-05-06 11:35 1421http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(基数分配排序法)
2009-05-06 11:41 1043http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(箱分配排序)
2009-05-06 11:43 880http://www.cnblogs.com/ziyiFly/ ... -
数据结构-排序: 两路归并排序算法
2009-05-06 11:44 1690数据结构-排序: 两路归 ... -
数据结构-排序: 插入排序(直接插入排序法)
2009-05-06 11:45 1180数据结构-排序: 插入排 ... -
数据结构-算法: 插入排序(希尔排序法)
2009-05-06 11:45 1425数据结构-算法: 插入排 ... -
数据结构-排序: 交换排序(快速排序法)
2009-05-06 11:46 1452数据结构-排序: 交换排序(快速排序法) 1、算法思想 ... -
数据结构-排序: 选择排序(堆选择排序法)
2009-05-06 11:47 873数据结构-排序: 选择排 ... -
数据结构-排序: 交换排序(冒泡排序法)
2009-05-06 11:47 1007数据结构-排序: 交换排序(冒泡排序法) 冒泡排序(Bu ... -
数据结构-排序: 选择排序(直接选择排序法)
2009-05-06 11:48 943数据结构-排序: 选择排序(直接选择排序法) 直接选择排 ... -
C#实现--单链表(链式)
2009-05-06 11:49 1359C#实现--单链表(链式) using Syste ... -
JAVA排序类汇总
2009-05-06 11:54 1166package com.softeem.jbs.lesson4 ... -
谈谈防 SQL 注入式攻击策略
2009-05-07 09:30 1391谈谈防 SQL 注入式攻击 ... -
二进制数转换为八进制, 十六进制数的算法
2009-05-07 09:44 1277using System; using System.Col ...
相关推荐
就是一个 简单的 二叉树的建立及前中后序遍历的 代码
二叉树 各种遍历算法 C#实现
(1)能够输入二叉树的各个结点,建立二叉树; (2)按层序、先序、中序、后序遍历序列输出二叉树(要求至少其中一个遍历方法用非递归实现)。
有测试结果 (一) 从键盘输入二叉树的扩展先序遍历序列,建立二叉树的二叉链表存储结构; (二) 分别用递归和非递归算法实现二叉树的三种遍历;
Console.WriteLine("先序遍历方法遍历二叉树:"); PreOrder(rootNode); Console.WriteLine("中序遍历方法遍历二叉树:"); MidOrder(rootNode); Console.WriteLine("后序遍历方法遍历二叉树:"); ...
二叉树的建立与遍历 源代码;用两种方案建立,用多种遍历方法输出;完整的应用程序
线索二叉树的实现 C#实现 线索二叉树的实现 C#实现
数据结构二叉树实现二叉树的遍历先中后序,二叉树的基本运算,计算结点数,实现二叉树的复制,求二叉树的最大值和最小值,求二叉树中所有根结点到叶子结点的路径,判断两颗二叉树的相似性...
按先序序列构造一棵二叉链表表示的二叉树T,并输出该T的中序遍历序列。实现提示: 1) 按先序序列建立一棵二叉树时,先构造根结点,再构造根的左子树,然后构造右子树;每棵子树又都是二叉树,所以构造一棵子树的过程...
C# 二叉树前中后遍历 可以自己设置二叉树什么样子
一个用C#写的简单的二叉树,可以创建、前序遍历、中序遍历、后续遍历。Windows 窗体应用程序。
VS2005控制台程序,C#二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树
C#用栈的方法写二叉树的前中后序遍历
可以在 C# windows 下输出二叉树的先、中、后序遍历和层次遍历 并有两中方案
二叉树遍历 前遍历 后遍历 中遍历
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历、计算叶子节点数目和所有节点数目,使用队列实现二叉树的层次遍历.zip
自己写的一个小小测试,可以三种方式遍历二叉树,你可以自己建立二叉树进行测试
二叉树遍历序列.cpp
我用的是c#控制台写得二叉树 可以实现的二叉树