C#非遞歸先序遍歷二叉樹實(shí)例
更新時(shí)間:2015年07月15日 17:52:07 作者:落英繽紛
這篇文章主要介紹了C#非遞歸先序遍歷二叉樹的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了C#非遞歸先序遍歷二叉樹的方法。分享給大家供大家參考。具體如下:
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#程序員應(yīng)該養(yǎng)成的程序性能優(yōu)化寫法
工作和生活中經(jīng)??梢钥吹揭恍┏绦蛟?寫代碼的時(shí)候只關(guān)注代碼的邏輯性,而不考慮運(yùn)行效率,其實(shí)這對(duì)大多數(shù)程序猿來說都是沒有問題的,不過作為一只有理想的CodeMonkey,我還是希望給大家分享一些性能優(yōu)化心得2017-08-08C#使用Twain協(xié)議開發(fā)一個(gè)高掃儀對(duì)接功能
這篇文章主要為大家詳細(xì)介紹了C#如何使用Twain協(xié)議開發(fā)一個(gè)高掃儀對(duì)接功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02采用C#實(shí)現(xiàn)軟件自動(dòng)更新的方法
這篇文章主要介紹了采用C#實(shí)現(xiàn)軟件自動(dòng)更新的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08支持多類型數(shù)據(jù)庫的c#數(shù)據(jù)庫模型示例
本文為大家提供一個(gè)c#數(shù)據(jù)庫訪問模型,支持多類型數(shù)據(jù)庫,簡(jiǎn)單抽取數(shù)據(jù)庫訪問函數(shù),大家參考使用吧2014-01-01C#實(shí)現(xiàn)的二維數(shù)組排序算法示例
這篇文章主要介紹了C#實(shí)現(xiàn)的二維數(shù)組排序算法,涉及C#針對(duì)二維數(shù)組的遍歷、判斷、排序等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12