如何用c# 构造一颗二叉树 求实现代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class Node //定义树的节点 { int _content; Node _leftLink; Node _rightLink; public Node(int content) { _content = content; _leftLink = null; _rightLink = null; } public int Content { set { _content = value; } get { return _content; } } public Node LeftLink { get { return _leftLink; } set { _leftLink = value; } } public Node RightLink { get { return _rightLink; } set { _rightLink = value; } } } class BinTree { readonly Node root; public BinTree(int content) { root = new Node(content); } public void AddNode(int content) { Node tNode = root; Node sNode = null; while (tNode != null) //while循环用来定位要插入节点位置的父节点 { sNode = tNode; //sNode 用来记录要插入节点的父节点 if (content < tNode.Content) { tNode = tNode.LeftLink; } else { tNode = tNode.RightLink; } } if (content < sNode.Content) //添加节点 sNode.LeftLink = new Node(content); else sNode.RightLink = new Node(content); } private void Print(Node aNode) //中序遍历 { if (aNode.LeftLink != null) { Print(aNode.LeftLink); } Console.Write("{0}\t", aNode.Content); if (aNode.RightLink != null) { Print(aNode.RightLink); } } public void PrintAll() { Print(root); } } class Program { static void Main(string[] args) { Random rnd = new Random(); BinTree t = new BinTree(rnd.Next(100)); for (int i = 0; i < 9; i++) t.AddNode(rnd.Next(100)); Console.WriteLine(); t.PrintAll(); Console.ReadLine(); } } /// <summary> /// 二叉树接点结构 /// </summary> /// <typeparam name="T"></typeparam> public class BinarytreeNode<T> { public BinarytreeNode<T> left; public BinarytreeNode<T> right; public T data; } public class Binarytree<T> { private BinarytreeNode<T> Root; public Binarytree() { Root = null; } #region Traversal public List<T> getPreorderTraversal() { List<T> nodes = new List<T>(); PreorderTraversal(Root, nodes); return nodes; } public List<T> getInorderTraversal() { List<T> nodes = new List<T>(); InorderTraversal(Root, nodes); return nodes; } public List<T> getPostorderTraversal() { List<T> nodes = new List<T>(); PostorderTraversal(Root, nodes); return nodes; } /// <summary> /// 先根遍历 /// </summary> /// <param name="root"></param> /// <param name="nodes"></param> public static void PreorderTraversal(BinarytreeNode<T> root, List<T> nodes) { if (root != null) { nodes.Add(root.data); if (root.left != null) PreorderTraversal(root.left, nodes); if (root.right != null) PreorderTraversal(root.right, nodes); } } /// <summary> /// 中根遍历 /// </summary> /// <param name="root"></param> /// <param name="nodes"></param> public static void InorderTraversal(BinarytreeNode<T> root, List<T> nodes) { if (root != null) { if (root.left != null) InorderTraversal(root.left, nodes); nodes.Add(root.data); if (root.right != null) InorderTraversal(root.right, nodes); } } /// <summary> /// 后根遍历 /// </summary> /// <param name="root"></param> /// <param name="nodes"></param> public static void PostorderTraversal(BinarytreeNode<T> root, List<T> nodes) { if (root != null) { if (root.left != null) PostorderTraversal(root.left, nodes); if (root.right != null) PostorderTraversal(root.right, nodes); nodes.Add(root.data); } } #endregion } 用法 BinarytreeNode<string> bb = new BinarytreeNode<string>(); BinarytreeNode<string> cc = new BinarytreeNode<string>(); BinarytreeNode<string> dd = new BinarytreeNode<string>(); bb.left = cc; bb.right = dd; bb.data = "00"; cc.data = "111"; cc.left = null; List<string>aa=new List<string>(); Binarytree<string>.PreorderTraversal(bb, aa);//中续遍历 string result = ""; foreach (string a in aa) { result += a+"--"; } MessageBox.Show(result); 主要就是数据结构参考:http://www.cnblogs.com/kyovcs/archive/2008/11/02/880582.htmlhttp://www.cnblogs.com/ziyiFly/archive/2008/09/04/1283908.html Select Case arrary(i, 2) ' 加载fcNodeId, fcMenuCaption, fiLevel,fbEnabled,fbVisible ' p_Arrary[i,0] 代码垫虫絏 ' p_Arrary[i,1] 名称垫虫嘿 ' p_Arrary[i,2] 级别标志 垫虫 ' p_Arrary[i,3] 是否可用 琌ノ ' p_Arrary[i,4] 是否可见 琌ǎ ' p_Arrary[i,5] 快捷键 ' p_Arrary[i,6] 连接窗体 ' p_Arrary[i,7] 操作权限(只读、可编辑) Case "1" MenuNew = menu.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click) MenuNew.Enabled = False MenuNew.Visible = False If arrary(i, 3) = True Or arrary(0, 3) = "1" Then ''''aaaaa MenuNew.Enabled = True End If If arrary(i, 4) = True Or arrary(0, 4) = "1" Then ''''aaaaa MenuNew.Visible = True End If If arrary(i, 1) = "【窗口】" Then MenuNew.MdiList = False ''''aaaaa End If ' MnuParent1.MenuItems.Add(MenuNew) MnuParent1 = MenuNew Case "2" MenuNew = MnuParent1.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click) MenuNew.Enabled = False ''''aaaaa MenuNew.Visible = False If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa MenuNew.Enabled = True End If If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa MenuNew.Visible = True End If MnuParent2 = MenuNew Case "3" MenuNew = MnuParent2.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click) MenuNew.Enabled = False ''''aaaaa MenuNew.Visible = False If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa MenuNew.Enabled = True End If If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa MenuNew.Visible = True End If MnuParent3 = MenuNew Case "4" MenuNew = MnuParent3.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click) MenuNew.Enabled = False ''''aaaaa MenuNew.Visible = False If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa MenuNew.Enabled = True End If If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa MenuNew.Visible = True End If MnuParent4 = MenuNew Case Else End Select C#如何创建一个word文件? ascx在ascp中使用时不能显示图片! C#如何能够操作其他窗口上的按键和toolbar 请高手指点: 网络视频共享 文本文件里如何读出指定文字? 求救! 想写个猜xp密码的工具 请问TreeView可以绑定XML文件么? 高分求web文件浏览问题 推荐几本讲C#做应用程序的界面开发的好书,谢谢高手指点 求几款简单的屏幕截图工具,并可简单编辑 如何 较好的控制form的关闭 插入问题
{
int _content;
Node _leftLink;
Node _rightLink;
public Node(int content)
{
_content = content;
_leftLink = null;
_rightLink = null;
}
public int Content
{
set { _content = value; }
get { return _content; }
}
public Node LeftLink
{
get { return _leftLink; }
set { _leftLink = value; }
}
public Node RightLink
{
get { return _rightLink; }
set { _rightLink = value; }
}
}
class BinTree
{
readonly Node root;
public BinTree(int content)
{
root = new Node(content);
}
public void AddNode(int content)
{
Node tNode = root;
Node sNode = null;
while (tNode != null) //while循环用来定位要插入节点位置的父节点
{
sNode = tNode; //sNode 用来记录要插入节点的父节点
if (content < tNode.Content)
{
tNode = tNode.LeftLink;
}
else
{
tNode = tNode.RightLink;
}
}
if (content < sNode.Content) //添加节点
sNode.LeftLink = new Node(content);
else
sNode.RightLink = new Node(content);
}
private void Print(Node aNode) //中序遍历
{
if (aNode.LeftLink != null)
{
Print(aNode.LeftLink);
}
Console.Write("{0}\t", aNode.Content);
if (aNode.RightLink != null)
{
Print(aNode.RightLink);
}
}
public void PrintAll()
{
Print(root);
}
} class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
BinTree t = new BinTree(rnd.Next(100));
for (int i = 0; i < 9; i++)
t.AddNode(rnd.Next(100));
Console.WriteLine();
t.PrintAll();
Console.ReadLine();
}
}
/// 二叉树接点结构
/// </summary>
/// <typeparam name="T"></typeparam>
public class BinarytreeNode<T>
{
public BinarytreeNode<T> left;
public BinarytreeNode<T> right;
public T data;
} public class Binarytree<T>
{
private BinarytreeNode<T> Root; public Binarytree()
{
Root = null;
} #region Traversal
public List<T> getPreorderTraversal()
{
List<T> nodes = new List<T>();
PreorderTraversal(Root, nodes);
return nodes;
} public List<T> getInorderTraversal()
{
List<T> nodes = new List<T>();
InorderTraversal(Root, nodes);
return nodes;
} public List<T> getPostorderTraversal()
{
List<T> nodes = new List<T>();
PostorderTraversal(Root, nodes);
return nodes;
} /// <summary>
/// 先根遍历
/// </summary>
/// <param name="root"></param>
/// <param name="nodes"></param>
public static void PreorderTraversal(BinarytreeNode<T> root, List<T> nodes)
{
if (root != null)
{
nodes.Add(root.data);
if (root.left != null) PreorderTraversal(root.left, nodes);
if (root.right != null) PreorderTraversal(root.right, nodes);
}
} /// <summary>
/// 中根遍历
/// </summary>
/// <param name="root"></param>
/// <param name="nodes"></param>
public static void InorderTraversal(BinarytreeNode<T> root, List<T> nodes)
{
if (root != null)
{
if (root.left != null) InorderTraversal(root.left, nodes);
nodes.Add(root.data);
if (root.right != null) InorderTraversal(root.right, nodes);
}
} /// <summary>
/// 后根遍历
/// </summary>
/// <param name="root"></param>
/// <param name="nodes"></param>
public static void PostorderTraversal(BinarytreeNode<T> root, List<T> nodes)
{
if (root != null)
{
if (root.left != null) PostorderTraversal(root.left, nodes);
if (root.right != null) PostorderTraversal(root.right, nodes);
nodes.Add(root.data);
}
}
#endregion
}
BinarytreeNode<string> cc = new BinarytreeNode<string>();
BinarytreeNode<string> dd = new BinarytreeNode<string>();
bb.left = cc;
bb.right = dd;
bb.data = "00";
cc.data = "111";
cc.left = null;
List<string>aa=new List<string>();
Binarytree<string>.PreorderTraversal(bb, aa);//中续遍历
string result = "";
foreach (string a in aa)
{
result += a+"--";
}
MessageBox.Show(result);
参考:
http://www.cnblogs.com/kyovcs/archive/2008/11/02/880582.html
http://www.cnblogs.com/ziyiFly/archive/2008/09/04/1283908.html
' 加载fcNodeId, fcMenuCaption, fiLevel,fbEnabled,fbVisible
' p_Arrary[i,0] 代码垫虫絏
' p_Arrary[i,1] 名称垫虫嘿
' p_Arrary[i,2] 级别标志 垫虫
' p_Arrary[i,3] 是否可用 琌ノ
' p_Arrary[i,4] 是否可见 琌ǎ
' p_Arrary[i,5] 快捷键
' p_Arrary[i,6] 连接窗体
' p_Arrary[i,7] 操作权限(只读、可编辑)
Case "1"
MenuNew = menu.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click)
MenuNew.Enabled = False
MenuNew.Visible = False
If arrary(i, 3) = True Or arrary(0, 3) = "1" Then ''''aaaaa
MenuNew.Enabled = True
End If
If arrary(i, 4) = True Or arrary(0, 4) = "1" Then ''''aaaaa
MenuNew.Visible = True
End If
If arrary(i, 1) = "【窗口】" Then
MenuNew.MdiList = False ''''aaaaa
End If
' MnuParent1.MenuItems.Add(MenuNew)
MnuParent1 = MenuNew
Case "2"
MenuNew = MnuParent1.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click)
MenuNew.Enabled = False ''''aaaaa
MenuNew.Visible = False
If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa
MenuNew.Enabled = True
End If
If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa
MenuNew.Visible = True
End If
MnuParent2 = MenuNew Case "3"
MenuNew = MnuParent2.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click)
MenuNew.Enabled = False ''''aaaaa
MenuNew.Visible = False
If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa
MenuNew.Enabled = True
End If
If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa
MenuNew.Visible = True
End If
MnuParent3 = MenuNew Case "4"
MenuNew = MnuParent3.MenuItems.Add(arrary(i, 1), AddressOf Mnu_NewMenuItem_Click)
MenuNew.Enabled = False ''''aaaaa
MenuNew.Visible = False
If (arrary(i, 3) = True Or arrary(i, 3) = "1") Then ''''aaaaa
MenuNew.Enabled = True
End If
If arrary(i, 4) = True Or arrary(i, 4) = "1" Then ''''aaaaa
MenuNew.Visible = True
End If
MnuParent4 = MenuNew
Case Else End Select