c#用递归建立而产生数 c#中如何用递归方法建立一个二叉树 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 - -关于循环和分支c#和c有区别么。数据结构上的用c建立二叉树,基本不用改就成c#了吧 /// <summary> /// 创建二叉树 /// </summary> /// <param name="tree"></param> /// <param name="value"></param> /// <param name="curIndex">从0开始</param> void CreateTree(Tree tree, object[] value, int curIndex) { if (curIndex < value.Length) { //创建 tree.Value = value[curIndex]; tree.Index = curIndex; if (curIndex * 2 + 1 < value.Length) { CreateTree(tree.Left, value, curIndex * 2 + 1); } else if (curIndex * 2 + 2 < value.Length) { CreateTree(tree.Right, value, curIndex * 2 + 2); } } } struct Tree { public int Index = -1; public Tree Left; public Tree Right; public object Value; } 参考: using System; public class Node { //成员变量 private object _data; //数据 private Node _left; //左孩子 private Node _right; //右孩子 public object Data { get { return _data; } } public Node Left //左孩子 { get { return _left; } set { _left = value; } } public Node Right //右孩子 { get { return _right; } set { _right = value; } } //构造方法 public Node(object data) { _data = data; } public override string ToString() { return _data.ToString(); } }using System; public class BinaryTree { //成员变量 private Node _head; //头指针 private string cStr; //用于构造二叉树的字符串 public Node Head //头指针 { get { return _head; } } //构造方法 public BinaryTree(string constructStr) { cStr = constructStr; _head = new Node(cStr[0]); //添加头结点 Add(_head, 0); //给头结点添加孩子结点 } private void Add(Node parent, int index) { int leftIndex = 2 * index + 1; //计算左孩子索引 if (leftIndex < cStr.Length) //如果索引没超过字符串长度 { if (cStr[leftIndex] != '#') //'#'表示空结点 { //添加左孩子 parent.Left = new Node(cStr[leftIndex]); //递归调用Add方法给左孩子添加孩子节点 Add(parent.Left, leftIndex); } } int rightIndex = 2 * index + 2; if (rightIndex < cStr.Length) { if (cStr[rightIndex] != '#') { //添加右孩子 parent.Right = new Node(cStr[rightIndex]); //递归调用Add方法给右孩子添加孩子节点 Add(parent.Right, rightIndex); } } } public void PreOrder(Node node) //先序遍历 { if (node != null) { Console.Write(node.ToString()); //打印字符 PreOrder(node.Left); //递归 PreOrder(node.Right); //递归 } } public void MidOrder(Node node) //中序遍历 { if (node != null) { MidOrder(node.Left); //递归 Console.Write(node.ToString()); //打印字符 MidOrder(node.Right); //递归 } } public void AfterOrder(Node node) //后继遍历 { if (node != null) { AfterOrder(node.Left); //递归 AfterOrder(node.Right); //递归 Console.Write(node.ToString()); //打印字符 } } } System.IO.File.SetAttributes去掉只读属性,相反怎么添加只读属性呢? 正则表达式 请问知道某一年(如2007),如何返回一个数组,数组的每个成员为某月最后一天? 全身家当,求一思路,顶者有分 使用ADSI如何验证输入的用户名和口令是否正确,可以登录? 网络上ASPX的权限问题 [急!]怎样选出datatable里的前几行? 关于FTP的问题 获取控件所有属性问题,请帮忙,急!!!!!!!! 如何用亮颜色来显示选中的treeview node? 无法绑定由多个部分组成的标识列 快速转换byte数组成16进制字符串
/// <summary>
/// 创建二叉树
/// </summary>
/// <param name="tree"></param>
/// <param name="value"></param>
/// <param name="curIndex">从0开始</param>
void CreateTree(Tree tree, object[] value, int curIndex)
{
if (curIndex < value.Length)
{
//创建
tree.Value = value[curIndex];
tree.Index = curIndex;
if (curIndex * 2 + 1 < value.Length)
{
CreateTree(tree.Left, value, curIndex * 2 + 1);
}
else if (curIndex * 2 + 2 < value.Length)
{
CreateTree(tree.Right, value, curIndex * 2 + 2);
}
}
}
{
public int Index = -1;
public Tree Left;
public Tree Right;
public object Value;
}
public class Node
{
//成员变量
private object _data; //数据
private Node _left; //左孩子
private Node _right; //右孩子
public object Data
{
get { return _data; }
}
public Node Left //左孩子
{
get { return _left; }
set { _left = value; }
}
public Node Right //右孩子
{
get { return _right; }
set { _right = value; }
}
//构造方法
public Node(object data)
{
_data = data;
}
public override string ToString()
{
return _data.ToString();
}
}using System;
public class BinaryTree
{ //成员变量
private Node _head; //头指针
private string cStr; //用于构造二叉树的字符串
public Node Head //头指针
{
get { return _head; }
}
//构造方法
public BinaryTree(string constructStr)
{
cStr = constructStr;
_head = new Node(cStr[0]); //添加头结点
Add(_head, 0); //给头结点添加孩子结点
}
private void Add(Node parent, int index)
{
int leftIndex = 2 * index + 1; //计算左孩子索引
if (leftIndex < cStr.Length) //如果索引没超过字符串长度
{
if (cStr[leftIndex] != '#') //'#'表示空结点
{ //添加左孩子
parent.Left = new Node(cStr[leftIndex]);
//递归调用Add方法给左孩子添加孩子节点
Add(parent.Left, leftIndex);
}
}
int rightIndex = 2 * index + 2;
if (rightIndex < cStr.Length)
{
if (cStr[rightIndex] != '#')
{ //添加右孩子
parent.Right = new Node(cStr[rightIndex]);
//递归调用Add方法给右孩子添加孩子节点
Add(parent.Right, rightIndex);
}
}
}
public void PreOrder(Node node) //先序遍历
{
if (node != null)
{
Console.Write(node.ToString()); //打印字符
PreOrder(node.Left); //递归
PreOrder(node.Right); //递归
}
}
public void MidOrder(Node node) //中序遍历
{
if (node != null)
{
MidOrder(node.Left); //递归
Console.Write(node.ToString()); //打印字符
MidOrder(node.Right); //递归
}
}
public void AfterOrder(Node node) //后继遍历
{
if (node != null)
{
AfterOrder(node.Left); //递归
AfterOrder(node.Right); //递归
Console.Write(node.ToString()); //打印字符
}
}
}