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

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

自己随手写的 , 自测了一下 没有问题

大家有觉得哪里改进的,或者可以优化的可以留言或私信

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;
        }
    }
}
8 条评论
  1. Hubert · 2017-03-24 15:27:47 · 赞(0) · 回复
    测试评论
  2. 谁在秋千 · 2017-03-24 13:57:05 · 赞(0) · 回复
    这是第二条评论
    1. Hubert · 2017-03-24 15:29:56 · 赞(0) · 回复
      测试嵌套评论
      1. 谁在秋千 · 2017-03-24 16:31:25 · 赞(0) · 回复
        测试三层嵌套评论
        1. 谁在秋千 · 2017-03-24 16:31:50 · 赞(0) · 回复
          这是第四层嵌套评论
          1. 谁在秋千 · 2017-03-24 16:32:07 · 赞(0) · 回复
            这是第五层嵌套评论
            1. 谁在秋千 · 2017-03-24 16:32:30 · 赞(0) · 回复
              这是第六层嵌套评论
  3. 谁在秋千 · 2017-03-24 13:28:00 · 赞(0) · 回复
    测试评论