繪製樹結構

2021-07-23 06:30:37 字數 1072 閱讀 2003

樹的表示方法有雙親表示法、孩子表示法、雙親孩子表示法、孩子兄弟表示法,具體請參考其中前三種基於陣列,最後一種基於鍊錶。我定義的數節點資料結構為

typedef struct _treenode 

treenode, *ptreenode;

也就是孩子兄弟表示法,附加乙個指向父節點的指標。

參考上圖,發現第乙個子快照和父快照處於同一橫向水平線上,而兄弟節點處於豎向垂直線上。並且每乙個子節點在其前乙個兄弟節點繪製完畢後才繪製,所以其所在垂直方向的深度為其前乙個兄弟節點(包括這個兄弟節點的子節點)鎖繪製的最大深度加1。根據上圖,可以給每乙個快照點乙個座標方便繪製,例如debug mode的座標為(2,0),而debug adv的座標為(3,2)。於是我又在之前樹結點定義加入了座標值:

typedef struct _treenode 

treenode, *ptreenode;

初始化根節點座標值為(0,0),而後在遍歷樹的過程中確定每個結點的座標,並繪製(輸出)樹結點,以下為完整的**

// printtree.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

typedef struct _treenode

treenode, *ptreenode;

ptreenode addnode(ptreenode p, char val)

else

p->sibling = pn;

} return pn;

}int print(ptreenode p)

//列印兄弟節點

if(p->sibling)

return depth;

}int _tmain(int argc, _tchar* argv)

樹結構備份

為每個樹枝建立葉子結點 private void createbranch stringbuffer treemap,int parentid,list alist 在錄入結點資料時可以提前錄入結點下是否有子結點的資訊,這樣如果該結點下面沒有子結點,就不用再去遞迴,可以提公升效率 if map.ge...

樹結構總結

樹 tree n n 0 個結點構成的有限集合.當n 0時,成為空樹 對於任一棵非空樹 n 0 它具備一下性質 樹中有乙個稱為 根 的特殊結點,用r表示 其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每個集合本身又是一棵樹,稱為原來樹的 子樹 子樹是不相交的 除了根結點外,每個結...

樹結構 概念

節點的度 乙個節點的子節點的數量就是節點的度 節點的權 節點所存放的內容就是節點的權 葉子節點 沒有子節點的節點 節點的度為零的節點 稱為子節點 子樹 從樹結構中分出乙個更小的樹結構稱為子樹 層 根節點為第一層,根節點的子節點為第二層,以此推類 樹的高度 最大的層就是樹的高度 森林 多個樹組成稱為森...