C#非递归先序遍历二叉树实例
本文实例讲述了C#非递归先序遍历二叉树的方法。分享给大家供大家参考。具体如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceConsoleApplication5
{
classProgram
{
staticvoidMain(string[]args)
{
NodetreeRoot=CreateTree();
scanTree(treeRoot);
}
privatestaticvoidscanTree(NodetreeRoot)
{
List<Node>list=newList<Node>();
list.Add(treeRoot);
Nodepoint=treeRoot;
Write(treeRoot);
while(true)
{
if(!list.Contains(point))
{//上一轮是移除的操作
if(treeRoot.leftSon==point)
{//移除的是左结点
if(treeRoot.rightSon!=null)
{
treeRoot=treeRoot.rightSon;
list.Add(treeRoot);
Write(treeRoot);
point=treeRoot;
continue;
}
list.Remove(treeRoot);
if(list.Count==0)
{
break;
}
point=treeRoot;
treeRoot=list[list.Count-1];
}
else
{//移除的是右结点
list.Remove(treeRoot);
if(list.Count==0)
{
break;
}
point=treeRoot;
treeRoot=list[list.Count-1];
}
continue;
}
if(treeRoot.leftSon!=null)
{
treeRoot=treeRoot.leftSon;
Write(treeRoot);
list.Add(treeRoot);
point=treeRoot;
continue;
}
if(treeRoot.rightSon!=null)
{
treeRoot=treeRoot.rightSon;
Write(treeRoot);
point=treeRoot;
list.Add(treeRoot);
continue;
}
if(treeRoot.leftSon==null&&treeRoot.rightSon==null)
{
list.Remove(treeRoot);
if(list.Count==0)
{
break;
}
point=treeRoot;
treeRoot=list[list.Count-1];
}
}
}
publicstaticvoidWrite(Nodenode)
{
Console.WriteLine(node.Data);
}
privatestaticNodeCreateTree()
{
Nodea=newNode("A");
a.leftSon=newNode("B");
a.rightSon=newNode("C");
a.leftSon.leftSon=newNode("D");
a.leftSon.rightSon=newNode("E");
a.rightSon.leftSon=newNode("F");
a.rightSon.rightSon=newNode("G");
a.leftSon.leftSon.leftSon=newNode("H");
a.leftSon.leftSon.rightSon=newNode("I");
returna;
}
}
classNode
{
publicstringData{get;set;}
publicNodeleftSon{get;set;}
publicNoderightSon{get;set;}
publicNode(stringdata)
{
Data=data;
}
}
}
希望本文所述对大家的C#程序设计有所帮助。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下