1. 程式人生 > >二叉樹遍歷 C#

二叉樹遍歷 C#

這就是 中序 工作 class stat public 完全 每一個 前期準備

二叉樹遍歷 C#

什麽是二叉樹

  二叉樹是每個節點最多有兩個子樹的樹結構
  (1)完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二 叉樹。
  (2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
  (3)平衡二叉樹——平衡二叉樹又被稱為AVL樹,它是一棵二叉排序樹,且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

  二叉數遍歷 有 前序遍歷、中序遍歷、後續遍歷,層次遍歷、Z型遍歷

前期準備工作

  1.定義樹的結構

    public class Tree
    {
        public string Value;
        public Tree Left;
        public Tree Right;
    }

  2.創建一顆二叉樹

        public static Tree CreatTree()
        {
            Tree tree = new Tree() { Value = "A" };
            tree.Left = new Tree()
            {
                Value = "B",
                Left = new Tree() { Value = "D" },
                Right = new Tree() { Value = "E", Right = new Tree() { Value = "H" } }
            };
            tree.Right = new Tree() { Value = "C", Left = new Tree() { Value = "F" }, Right=new Tree() { Value="G"} };
            return tree;
        }

  樹的效果圖如下

技術分享

前序遍歷

  前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹
  前序遍歷結果 A->B->D->E->H->C->F->G
  C#實現二叉樹的前序遍歷

        public static void PreOrder(Tree tree)
        {
            Console.Write(tree.Value + "  ");
            if (tree.Left != null)
            {
                PreOrder(tree.Left);
            }
            if (tree.Right != null)
            {
                PreOrder(tree.Right);
            }
        }

中序遍歷

  中序遍歷也叫做中根遍歷、中序周遊,遍歷方式是先左後根再右

  中序遍歷結果 D->B->E->H->A->F->C->G

  看代碼

       public static void InOrder(Tree tree)
        {
            if (tree.Left != null)
            {
                InOrder(tree.Left);
            }
            Console.Write(tree.Value + "  ");
            if (tree.Right != null)
            {
                InOrder(tree.Right);
            }
        }  

後序遍歷

  後序遍歷也叫做後根遍歷、後序周遊,可記做左右根。先左後右再根。巧記:左右根。
  後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點
  後序遍歷結果 D->H->E->B->F->G->C->A
  看代碼

        public static void InOrder(Tree tree)
        {
            if (tree.Left != null)
            {
                InOrder(tree.Left);
            }
            Console.Write(tree.Value + "  ");
            if (tree.Right != null)
            {
                InOrder(tree.Right);
            }
        }

層次遍歷

  層次遍歷就是按照樹的層次從上到下進行輸出,層次遍歷我們可以借助隊列的先進先出
  看代碼

       public static void LevelOrder(Tree tree)
        {
            var queue = new Queue<Tree>();
            queue.Enqueue(tree);
            while (queue.Any())
            {
                var item = queue.Dequeue();
                Console.Write(item.Value);
                if (item.Left != null)
                {
                    queue.Enqueue(item.Left);
                }
                if (item.Right != null)
                {
                    queue.Enqueue(item.Right);
                }
            }
        }

二叉樹遍歷 C#