如何較為直觀的打印二叉樹


二叉樹可以用常見的三種遍歷結果來描述其構造,但是 不夠直觀,尤其是二叉樹中有重復值的時候,僅通過三種遍歷的結果來構造二叉樹的真實結構是難上加難

那么我們如何設計一個更直觀的二叉樹描述呢?首先我們來看下面圖中這個二叉樹結構,我們來設計一個算法用來更直觀的描述樹的結構

以上面的這個樹結構為例子,我們來給他的每個節點加點標識

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6 
 7 
 8 public class Node  9 { 10     public int value; 11     public Node left; 12     public Node right; 13 
14     public Node(int data) 15  { 16         this.value = data; 17  } 18 
19     /// <summary>
20     /// 加上字符的打印二叉樹 21     /// </summary>
22     /// <param name="head">頭結點</param>
23     public void PrintTree(Node head) 24  { 25         PrintInOrder(head, 0, "H", 17); 26  } 27 
28     /// <summary>
29     /// 打印樹數據的核心 30     /// </summary>
31     /// <param name="head">頭結點</param>
32     /// <param name="height">數高度</param>
33     /// <param name="to">字符表示 H代表頭 V代表右結點,v代表左結點</param>
34     /// <param name="len"></param>
35     public void PrintInOrder(Node head, int height, string to, int len) 36  { 37         //保證結點空時退出遞歸
38         if (head == null) return; 39         //先遞歸遍歷右結點,找到右結點就輸出加上符號V和固定空格的字符
40         PrintInOrder(head.right, height + 1, "V", len); 41         //獲得該結點對應的字符,VnumV,表示右結點
42         string val = to + head.value + to; 43         //計算需要補多少位的空格
44         int lenM = val.Length; 45         int lenL = (len - lenM) / 2; 46         int lenR = len - lenM - lenL; 47         val = GetSpace(lenL) + val + GetSpace(lenR); 48         //輸出補位空格的字符
49         Console.Write(GetSpace(height * len) + val); 50         //遞歸遍歷左結點,如果不為空則打印字符 ^num^
51         PrintInOrder(head.left, height + 1, "^", len); 52  } 53 
54     /// <summary>
55     /// 規定打印時這個字符占用的長度一致 56     /// 缺多少位就補上多少位的空格 57     /// </summary>
58     /// <param name="num"></param>
59     /// <returns></returns>
60     public string GetSpace(int num) 61  { 62         string space = ""; 63         StringBuilder buf = new StringBuilder(" "); 64         for (int i = 0; i < num; i++) 65  { 66  buf.Append(space); 67  } 68         return buf.ToString(); 69  } 70 }

通過原來描述的基礎上,我們給右結點加上了"V",給左結點加上了“^”,給頭結點加上了“H”, 輸出的結果如下

當然大家還可以通過自己的方式去擴展


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM