搜遍了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 每個紅色節點的兩個子節點都是黑色。從每個葉子到根的所有路徑上不能有兩個連續的紅...