用户封面
多年不种菜 谁在秋千
C#
45% Complete
Java
45% Complete
CSS
45% Complete
HTML
45% Complete
PHP
45% Complete
JavaScript
45% Complete

一个患有强迫症并且热爱编程的少年,至今已有 5 年 C# 开发经验。有独立开发能力,喜欢智能硬件,希望能在这个行业中继续学习。

新浪微博: @多年不种菜      GitHub: @h2h      个人网站: www.icoding.me

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)
                    {//移除的是左结点
                        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];
                }
            }
  
        }
  
        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;
        }
    }
}

C#先序遍历二叉树(非递归)

C# 7 中的模范和实践

C# 7 一个主要的更新是带来了大量有趣的新特性。虽然已经有很多文章介绍了 C# 7 可以做哪些事,但关于如何用好 C# 7 的文章还是很少。遵循.NET Framework设计指南中的原则,我们首先通过下面的策略,获取这些新特性的最佳做法。