生成二叉樹和紅黑樹的helloworld(3)

2021-09-01 17:03:10 字數 1861 閱讀 8555

搜遍了google搜尋的所有文章

第14頁終於讓哥找到了這個方法:

/*這是乙個在字元環境中,用ascii碼列印二叉樹形狀的演算法。

在linux控制台下寫的例題,在dos中稍有點亂。

採用層次遍法。

演算法拙劣,僅供初學者做練習,(本人也是初學者,自學資料結構,剛好學到這二叉樹這一章,

半路出家,基礎差有點吃力頭大,搞幾個二叉的例題,卻不知道其構造形狀,

想呼叫圖形api做個美觀點的,卻有點偏離本章的學習目的,只好用字元列印,

linux環境中列印的還可以,dos中有點不穩定,如果您有更好的演算法一定不吝賜教。

我的qq:137241638 mail:[email protected]

*/#include

#include

#define maxsize 100

//pstart是二叉樹根結點在一行中的位置,一行最能列印124個字元,取其1/2。

//如果你的屏不夠寬的話,可以輸出文字檔案裡, aa.exe>>aa.txt

#define pstart 62

typedef struct node //二叉樹儲存結構

btnode;

typedef struct pnode //為列印二叉樹建了乙個結構。

pbtnode;

/*建立二叉樹。

用括號表示法表示二叉樹字串,建立二叉樹。

*/ btnode* createbtnode(char *s)}}

ch=*(++s);

}return b;

}//用適號表示法列印二叉樹。

void dispbtnode(btnode *b)}}

int btnodeheight(btnode *b)

}/*建立乙個二叉樹列印結點的資訊,

只被int createpbtnode(btnode *b,pbtnode *pqu)呼叫*/

void setpbtnodeinfo(btnode *b,pbtnode *parent,pbtnode *pb,int level,int lrflag)

/*用層次遍曆法,btnode結構儲存的二叉樹轉換為,pbtnode結構的二叉樹*/

int createpbtnode(btnode *b,pbtnode *pqu)

if(p->rchild!=null)

}return rear;

}//列印一層結點,及該層結點與父結點的連線路徑。

void pbtnodeprint(pbtnode *pb,int n,int h)

else if(n==1)

h=h-pb[0]->level+2;

for(k=0;klrflag==0)?l:r;

end+=p->parent->space;

for(;jlrflag==0)?'/':'\\';

printf("%c",c);

}printf("\n");

}for(i=0;ilrflag==0)

p->space=p->parent->space+l;

else

p->space=p->parent->space+r;

}for(i=0,j=0;ispace;j++)

printf(" ");

printf("%c",p->data);

}printf("\n");

}//迴圈列印所有層的資料

void dispbtree(btnode *b)

else

}pbtnodeprint(levelpqu,j,high);

}void main()

[img]

二叉樹 紅黑樹

也就是說,二叉排序樹中,左子樹都比節點小,右子樹都比節點大,遞迴定義。根據二叉排序樹這個特點我們可以知道,二叉排序樹的中序遍歷一定是從小到大的,比如上圖,中序遍歷結果是 1 3 4 6 7 8 10 13 14 效能取決於 public class demo public static void m...

紅黑二叉樹

紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...

二叉樹(三) 紅黑樹

紅黑樹是一種自平衡的二叉查詢樹,可解決二叉查詢樹因為多次插入新節點導致的不平衡問題。除了二叉查詢樹的基本特性外,還具有下列的特性 1 節點是紅色或者黑色 2 根節點是黑色 3 每個葉子節點都是黑色的空節點 nil節點 4 每個紅色節點的兩個子節點都是黑色。從每個葉子到根的所有路徑上不能有兩個連續的紅...