想在页面上画出二叉树,并演示遍历过程

zzw165027967 2011-01-31 12:08:49
我知道怎么遍历,也知道怎么构造,不知道怎么在页面上显示出来。~就是让随便一个人都能在页面上看出哪个是根节点,结构是怎么样的。
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(parent.Left, leftIndex);
}
else
{
parent.Left = new Node("");
Add(parent.Left, leftIndex);
}
}
int rightIndex = 2 * index + 2;
if (rightIndex < cStr.Length)
{
if (cStr[rightIndex] != '#')
{
parent.Right = new Node(cStr[rightIndex]);
Add(parent.Right, rightIndex);
}
else
{
parent.Right = new Node("");
Add(parent.Right, rightIndex);
}
}
}
}

这是BinaryTree类。
public class Node
{
private readonly object _data;
public object Data
{
get { return _data; }
}

public Node Left { get; set; }
public Node Right { get; set; }

public Node(object data)
{
_data = data;
}
public override string ToString()
{
return _data == null ? null : _data.ToString();
}
}

这是节点类
public void PreOrder(Node node, ref StringBuilder PreStr)
{
if (node != null)
{
PreStr.Append(node.ToString());
PreOrder(node.Left, ref PreStr);
PreOrder(node.Right, ref PreStr);
}
}

public void MidOrder(Node node, ref StringBuilder MidStr)
{
if (node != null)
{
MidOrder(node.Left, ref MidStr);
MidStr.Append(node.ToString());
MidOrder(node.Right, ref MidStr);
}
}

public void AfterOrder(Node node, ref StringBuilder AfterStr)
{
if (node != null)
{
AfterOrder(node.Left, ref AfterStr);
AfterOrder(node.Right, ref AfterStr);
AfterStr.Append(node.ToString());
}
}

这是3种遍历方法~
...全文
197 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhibin11 2011-01-31
  • 打赏
  • 举报
回复
我做过一个这样的东西,不过客户端是wpf,节点关系通过每行第一个格子的缩进量来体现,比较容易画。用silverlight应该与wpf类似,建议用这个。用Javascript的话,在滚动条滑动时,遍历二叉树找到相应页再画格子什么的恐怕消耗很大。
wuyq11 2011-01-31
  • 打赏
  • 举报
回复
silverlight,页面效果
或通过VML等画图实现

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧