1. 程式人生 > >資料結構(樹和二叉樹的轉換與遍歷)

資料結構(樹和二叉樹的轉換與遍歷)

二叉樹的遍歷

這裡寫圖片描述
先序遍歷(DLR):先遍歷根節點,再遍歷左子樹,最後遍歷右子樹
遍歷結果:ABDHIEJCFG

 public void PreOrder(Node<T> root)
        {
            if (root==null)
            {
                return;
            }
            Console.WriteLine(root.Data);
            PreOrder(root.LChild);
            PreOrder(root.RChild);
        }

中序遍歷(LDR):先遍歷左子樹,再遍歷根節點,最後遍歷右子樹
遍歷結果:HDIBJEAFCG

 public void InOrder(Node<T> root)
        {
            if (root == null)
            {
                return;
            }
            InOrder(root.LChild);
            Console.WriteLine(root.Data);
            InOrder(root.RChild);
        }

後序遍歷(LRD):先遍歷左子樹,再遍歷右子樹,最後遍歷根節點
遍歷結果:HIDJEBFGCA

 public void PostOrder(Node<T> root)
        {
            if (root == null)
            {
                return;
            }
            PostOrder(root.LChild);
            PostOrder(root.RChild);
            Console.WriteLine(root.Data);
        }

層序遍歷:從上到下,從左到右進行遍歷
遍歷結果:ABCDEFGHIJ

 public void LevelOrder(Node<T> root)
        {
            Queue<Node<T>> myQueue=new Queue<Node<T>>();
            myQueue.Enqueue(root);
            while (myQueue.Count!=0)
            {
                Node<T> temp=myQueue.Dequeue();
                Console.WriteLine(temp.Data);
                if (temp.LChild!=null)
                {
                    myQueue.Enqueue(temp.LChild);
                }
                if (temp.RChild!=null)
                {
                    myQueue.Enqueue(temp.RChild);
                }
            }
        }

樹和二叉樹的轉換

樹轉換成二叉樹
1>加線:就是在所有兄弟之間加一條線
2>抹線:就是對書中的每個節點,只保留他與第一個孩子之間的線,刪除他與其他孩子之間的連線
3>旋轉:就是以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明
這裡寫圖片描述
森林轉換為二叉樹
1>先把每棵樹轉換為二叉樹
2>第一課二叉樹不動,從第二棵二叉樹開始一次吧後一棵二叉樹的根節點作為前一棵二叉樹的根節點的有孩子結點,用線連線起來。
這裡寫圖片描述
二叉樹轉換為樹
1>若某結點的左孩子結點存在,將左孩子結點的右孩子結點、右孩子結點的右孩子結點……都作為該結點的孩子結點,將該結點與這些右孩子結點用線連線起來;
2>刪除原二叉樹中所有結點與其右孩子結點的連線;
3>整理(1)和(2)兩步得到的樹,使之結構層次分明。
這裡寫圖片描述
二叉樹轉換為森林
1>先把每個結點與右孩子結點的連線刪除,得到分離的二叉樹;
2>把分離後的每棵二叉樹轉換為樹;
3>整理第(2)步得到的樹,使之規範,這樣得到森林。

樹和森林的遍歷

這裡寫圖片描述
樹的遍歷
先序遍歷:先遍歷根節點,之後遍歷每顆子樹
遍歷結果:ABEFGCHDIJ
後序遍歷:先遍歷每顆字數,之後遍歷根節點
遍歷結果:EFGBHCIJDA
這裡寫圖片描述
森林的遍歷
先序遍歷:依次先序遍歷每一棵樹
遍歷結果:ABCDEFGHJI
中序遍歷:依次後序遍歷每一棵樹
遍歷結果:BCDAFEJHIG