C#非遞歸先序遍歷二叉樹(shù)實(shí)例
更新時(shí)間:2015年07月15日 17:52:07 作者:落英繽紛
這篇文章主要介紹了C#非遞歸先序遍歷二叉樹(shù)的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了C#非遞歸先序遍歷二叉樹(shù)的方法。分享給大家供大家參考。具體如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
Node treeRoot = CreateTree();
scanTree(treeRoot);
}
private static void scanTree(Node treeRoot)
{
List<Node> list = new List<Node>();
list.Add(treeRoot);
Node point = treeRoot;
Write(treeRoot);
while (true)
{
if (!list.Contains(point))
{ //上一輪是移除的操作
if (treeRoot.leftSon == point)
{//移除的是左結(jié)點(diǎn)
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
{//移除的是右結(jié)點(diǎn)
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];
}
}
}
public static void Write(Node node)
{
Console.WriteLine(node.Data);
}
private static Node CreateTree()
{
Node a = new Node("A");
a.leftSon = new Node("B");
a.rightSon = new Node("C");
a.leftSon.leftSon = new Node("D");
a.leftSon.rightSon = new Node("E");
a.rightSon.leftSon = new Node("F");
a.rightSon.rightSon = new Node("G");
a.leftSon.leftSon.leftSon = new Node("H");
a.leftSon.leftSon.rightSon = new Node("I");
return a;
}
}
class Node
{
public string Data { get; set; }
public Node leftSon { get; set; }
public Node rightSon { get; set; }
public Node(string data)
{
Data = data;
}
}
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能(2)(窗體應(yīng)用)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
datatable生成excel和excel插入圖片示例詳解
excel導(dǎo)出在C#代碼中應(yīng)用己經(jīng)很廣泛了,下面講了datatable生成excel、復(fù)制sheet頁(yè)、刪除sheet頁(yè)、選中sheet頁(yè)、另存excel文件、excel中插入圖片等功能2014-01-01
C#動(dòng)態(tài)執(zhí)行批處理命令的方法
這篇文章主要介紹了C#動(dòng)態(tài)執(zhí)行批處理命令的方法,可實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行一系列控制臺(tái)命令,并允許實(shí)時(shí)顯示出來(lái)執(zhí)行結(jié)果,需要的朋友可以參考下2014-11-11
C#實(shí)現(xiàn)將javascript文件編譯成dll文件的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將javascript文件編譯成dll文件的方法,涉及C#編譯生成dll動(dòng)態(tài)鏈接庫(kù)文件的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

