c編譯器樹解析
❶ c語言二叉樹的深度指什麼怎麼求
從根節點到葉子結點一次經過的結點形成樹的一條路徑,最長路徑的長度為樹的深度。根節點的深度為1。
解體思路:
1.如果根節點為空,則深度為0,返回0,遞歸的出口。
2.如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度,
3.比較左右子樹深度值,返回較大的那一個
4.通過遞歸調用
#include<iostream>
#include<stdlib.h>
usingnamespacestd;
structBinaryTreeNode
{
intm_nValue;
BinaryTreeNode*m_pLeft;
BinaryTreeNode*m_pRight;
};
//創建二叉樹結點
BinaryTreeNode*CreateBinaryTreeNode(intvalue)
{
BinaryTreeNode*pNode=newBinaryTreeNode();
pNode->m_nValue=value;
pNode->m_pLeft=NULL;
pNode->m_pRight=NULL;
returnpNode;
}
//連接二叉樹結點
voidConnectTreeNodes(BinaryTreeNode*pParent,BinaryTreeNode*pLeft,BinaryTreeNode*pRight)
{
if(pParent!=NULL)
{
pParent->m_pLeft=pLeft;
pParent->m_pRight=pRight;
}
}
//求二叉樹深度
intTreeDepth(BinaryTreeNode*pRoot)//計算二叉樹深度
{
if(pRoot==NULL)//如果pRoot為NULL,則深度為0,這也是遞歸的返回條件
return0;
//如果pRoot不為NULL,那麼深度至少為1,所以left和right=1
intleft=1;
intright=1;
left+=TreeDepth(pRoot->m_pLeft);//求出左子樹的深度
right+=TreeDepth(pRoot->m_pRight);//求出右子樹深度
returnleft>right?left:right;//返回深度較大的那一個
}
voidmain()
{
//1
///
//23
///\
//456
///
//7
//創建樹結點
BinaryTreeNode*pNode1=CreateBinaryTreeNode(1);
BinaryTreeNode*pNode2=CreateBinaryTreeNode(2);
BinaryTreeNode*pNode3=CreateBinaryTreeNode(3);
BinaryTreeNode*pNode4=CreateBinaryTreeNode(4);
BinaryTreeNode*pNode5=CreateBinaryTreeNode(5);
BinaryTreeNode*pNode6=CreateBinaryTreeNode(6);
BinaryTreeNode*pNode7=CreateBinaryTreeNode(7);
//連接樹結點
ConnectTreeNodes(pNode1,pNode2,pNode3);
ConnectTreeNodes(pNode2,pNode4,pNode5);
ConnectTreeNodes(pNode3,NULL,pNode6);
ConnectTreeNodes(pNode5,pNode7,NULL);
intdepth=TreeDepth(pNode1);
cout<<depth<<endl;
system("pause");
}
出處:http://www.cnblogs.com/xwdreamer
❷ 計算機c語言中 什麼是二叉樹
在計算機科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用作二叉查找樹和二叉堆或是二叉排序樹。
二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i -1次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹T,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。
樹是由一個或多個結點組成的有限集合,其中:
⒈必有一個特定的稱為根(ROOT)的結點;二叉樹
⒉剩下的結點被分成n>=0個互不相交的集合T1、T2、......Tn,而且, 這些集合的每一個又都是樹。樹T1、T2、......Tn被稱作根的子樹(Subtree)。
樹的遞歸定義如下:(1)至少有一個結點(稱為根)(2)其它是互不相交的子樹
1.樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為2;樹中度為零的結點稱為葉結點或終端結點。樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。
2.樹的深度——組成該樹各結點的最大層次。
3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點A,其原來的二棵子樹T1、T2、T3的集合{T1,T2,T3}就為森林;
4.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。
❸ 數據結構與演算法分析 —— C 語言描述:二叉樹
二叉樹(binary tree)是一棵樹,其中每個節點的兒子都不能多於兩個。
二叉樹的一個性質是平均二叉樹的深度要比 N 小的多,這個性質有時很重要。分析表明,這個平均深度為 ,而對於特殊類型的二叉樹,即二叉查找樹(binary search tree)。其深度的平均值是 。不幸的是,在最壞情況下,這個深度可以大到 N-1 的。
因為一棵二叉樹最多有兩個兒子,所以我們可以用指針直接指向它們。樹節點的聲明在結構上類似於雙鏈表的聲明,在聲明中,一個節點就是由 key(關鍵字)信息加上兩個指向其他節點的指針(Left 和 Right)組成的結構。
應用於鏈表上的許多法則也可以應用到樹上。特別地,當進行一次插入時,必須調用 malloc 創建一個節點。節點可以在調用 free 刪除後釋放。
我們可以用在畫鏈表時常用的矩形框畫出二叉樹,但是,樹一般畫成圓圈並用一些直線連接起來,因為二叉樹實際上就是圖(graph)。當涉及樹時,我們也不顯示地畫出 NULL 指針,因為具有 N 個節點的每一棵二叉樹都將需要 N+1 個 NULL 指針。
二叉樹有許多與搜索無關的重要應用。二叉樹的主要用處之一是在編譯器的設計領域。
上圖就是一個表達式樹(expression tree)。表達式樹的樹葉是操作樹(operand),比如常數或者變數,而其他的節點為操作符(operator)。由於這里所有的操作都是二元的,因此這棵特定的樹正好是二叉樹,雖然這是最簡單的情況,但是節點含有的兒子還是有可能多於兩個的。一個節點也有可能只有一個兒子,如果有一目減算符(unary minus operator)的情形。可以將通過遞歸計算左子樹和右子樹所得到的值應用在根處的算符操作中而算出表達式樹 T 的值。上面里的例子中,左子樹的值是「((3+1) 3)/((9-5)+2)」,右子樹的值是「(3 (7-4)+6)」,因此整棵樹的表達式就是圖上的結果。
我們可以通過遞歸產生一個帶括弧的左表達式,然後列印出在根處的運算符,最後再遞歸地產生一個帶括弧的右表達式而得到一個(對兩個括弧整體進行計算的)中綴表達式(infix expression)。這種一般的方法(左,節點,右)稱為中序遍歷(inorder traversal);由於其產生的表達式類型,這種遍歷很容易記憶。
另一個遍歷策略是遞歸列印出左子樹、右子樹,然後列印運算符。如果我們應用這種策略於上面的樹,則輸出將是「31+3 95-2+/743- 6+-」。這種遍歷策略一般稱為後序遍歷(postorder traversal)。
第三種遍歷策略是先列印出運演算法,然後遞歸地列印出右子樹和左子樹。同樣的,應用這種策略於上面的樹,則輸出將是「-/ ++313-952+ 3-746」,這是一種不太常用前綴(prefix)記法,這種遍歷策略為先序遍歷(preorder traversal)。
這里我們只給出一種演算法,來把後綴表達式轉變成表達式樹。這里的要點是,一次一個符號地讀入表達式。如果符號是操作符,那麼我們就建立一個單節點樹並將一個指向它的指針推入棧中。如果符號是操作符,那麼我們就從棧中彈出指向兩棵樹 和 的那兩個指針( 的先彈出)並形成一棵新的樹,該樹的根就是操作符,它的左、右兒子分別指向 和 。然後將這棵新樹的指針壓入棧中。
❹ C璇璦閲岀殑浜屼斧鏍
閭d釜鍙浜屽弶鏍戝晩
鏍戞槸涓縐嶉噸瑕佺殑闈炵嚎鎬ф暟鎹緇撴瀯錛岀洿瑙傚湴鐪嬶紝瀹冩槸鏁版嵁鍏冪礌錛堝湪鏍戜腑縐頒負緇撶偣錛夋寜鍒嗘敮鍏崇郴緇勭粐璧鋒潵鐨勭粨鏋勶紝寰堣薄鑷鐒剁晫涓鐨勬爲閭f牱銆傛爲緇撴瀯鍦ㄥ㈣備笘鐣屼腑騫挎硾瀛樺湪錛屽備漢綾葷ぞ浼氱殑鏃忚氨鍜屽悇縐嶇ぞ浼氱粍緇囨満鏋勯兘鍙鐢ㄦ爲褰㈣薄琛ㄧず銆傛爲鍦ㄨ$畻鏈洪嗗煙涓涔熷緱鍒板箍娉涘簲鐢錛屽傚湪緙栬瘧婧愮▼搴忓備笅鏃訛紝鍙鐢ㄦ爲琛ㄧず婧愭簮紼嬪簭濡備笅鐨勮娉曠粨鏋勩傚張濡傚湪鏁版嵁搴撶郴緇熶腑錛屾爲鍨嬬粨鏋勪篃鏄淇℃伅鐨勯噸瑕佺粍緇囧艦寮忎箣涓銆備竴鍒囧叿鏈夊眰嬈″叧緋葷殑闂棰橀兘鍙鐢ㄦ爲鏉ユ弿榪般
涓銆佹爲鐨勬傝堪
鏍戠粨鏋勭殑鐗圭偣鏄錛氬畠鐨勬瘡涓涓緇撶偣閮藉彲浠ユ湁涓嶆涓涓鐩存帴鍚庣戶錛岄櫎鏍圭粨鐐瑰栫殑鎵鏈夌粨鐐歸兘鏈変笖鍙鏈変竴涓鐩存帴鍓嶈秼銆備互涓嬪叿浣撳湴緇欏嚭鏍戠殑瀹氫箟鍙婃爲鐨勬暟鎹緇撴瀯琛ㄧず銆
錛堜竴錛夋爲鐨勫畾涔
鏍戞槸鐢變竴涓鎴栧氫釜緇撶偣緇勬垚鐨勬湁闄愰泦鍚堬紝鍏朵腑錛
鈷堝繀鏈変竴涓鐗瑰畾鐨勭О涓烘牴(ROOT)鐨勭粨鐐癸紱
鈷夊墿涓嬬殑緇撶偣琚鍒嗘垚n>=0涓浜掍笉鐩鎬氦鐨勯泦鍚圱1銆乀2銆......Tn錛岃屼笖錛 榪欎簺闆嗗悎鐨勬瘡涓涓鍙堥兘鏄鏍戙傛爲T1銆乀2銆......Tn琚縐頒綔鏍圭殑瀛愭爲(Subtree)銆
鏍戠殑閫掑綊瀹氫箟濡備笅錛氾紙1錛夎嚦灝戞湁涓涓緇撶偣錛堢О涓烘牴錛夛紙2錛夊叾瀹冩槸浜掍笉鐩鎬氦鐨勫瓙鏍
1.鏍戠殑搴︹斺斾篃鍗蟲槸瀹藉害錛岀畝鍗曞湴璇達紝灝辨槸緇撶偣鐨勫垎鏀鏁般備互緇勬垚璇ユ爲鍚勭粨鐐逛腑鏈澶х殑搴︿綔涓鴻ユ爲鐨勫害錛屽備笂鍥劇殑鏍戱紝鍏跺害涓3;鏍戜腑搴︿負闆剁殑緇撶偣縐頒負鍙剁粨鐐規垨緇堢緇撶偣銆傛爲涓搴︿笉涓洪浂鐨勭粨鐐圭О涓哄垎鏋濈粨鐐規垨闈炵粓絝緇撶偣銆傞櫎鏍圭粨鐐瑰栫殑鍒嗘灊緇撶偣緇熺О涓哄唴閮ㄧ粨鐐廣
2.鏍戠殑娣卞害鈥斺旂粍鎴愯ユ爲鍚勭粨鐐圭殑鏈澶у眰嬈★紝濡備笂鍥撅紝鍏舵繁搴︿負4錛
3.媯鏋椻斺旀寚鑻ュ共媯典簰涓嶇浉浜ょ殑鏍戠殑闆嗗悎錛屽備笂鍥撅紝鍘繪帀鏍圭粨鐐笰錛屽叾鍘熸潵鐨勪簩媯靛瓙鏍慣1銆乀2銆乀3鐨勯泦鍚坽T1,T2,T3}灝變負媯鏋楋紱
4.鏈夊簭鏍戔斺旀寚鏍戜腑鍚屽眰緇撶偣浠庡乏鍒板彸鏈夋″簭鎺掑垪錛屽畠浠涔嬮棿鐨勬″簭涓嶈兘浜掓崲錛岃繖鏍風殑鏍戠О涓烘湁搴忔爲錛屽惁鍒欑О涓烘棤搴忔爲銆
5.鏍戠殑琛ㄧず
鏍戠殑琛ㄧず鏂規硶鏈夎稿氾紝甯哥敤鐨勬柟娉曟槸鐢ㄦ嫭鍙鳳細鍏堝皢鏍圭粨鐐規斁鍏ヤ竴瀵瑰渾鎷鍙蜂腑錛岀劧鍚庢妸瀹冪殑瀛愭爲鐢卞乏鑷沖彸鐨勯『搴忔斁鍏ユ嫭鍙蜂腑錛岃屽瑰瓙鏍戜篃閲囩敤鍚屾牱鐨勬柟娉曞勭悊錛涘悓灞傚瓙鏍戜笌瀹冪殑鏍圭粨鐐圭敤鍦嗘嫭鍙鋒嫭璧鋒潵錛屽悓灞傚瓙鏍戜箣闂寸敤閫楀彿闅斿紑錛屾渶鍚庣敤闂鎷鍙鋒嫭璧鋒潵銆傚備笂鍥懼彲鍐欐垚濡備笅褰㈠紡錛
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
5. 2 浜屽弶鏍
1.浜屽弶鏍戠殑鍩烘湰褰㈡侊細
浜屽弶鏍戜篃鏄閫掑綊瀹氫箟鐨勶紝鍏剁粨鐐規湁宸﹀彸瀛愭爲涔嬪垎錛岄昏緫涓婁簩鍙夋爲鏈変簲縐嶅熀鏈褰㈡侊細
(1)絀轟簩鍙夋爲鈥斺(a)錛
(2)鍙鏈変竴涓鏍圭粨鐐圭殑浜屽弶鏍戔斺(b)錛
(3)鍙沖瓙鏍戜負絀虹殑浜屽弶鏍戔斺(c)錛
(4)宸﹀瓙鏍戜負絀虹殑浜屽弶鏍戔斺(d)錛
(5)瀹屽叏浜屽弶鏍戔斺(e)
娉ㄦ剰錛氬敖綆′簩鍙夋爲涓庢爲鏈夎稿氱浉浼間箣澶勶紝浣嗕簩鍙夋爲涓嶆槸鏍戠殑鐗規畩鎯呭艦銆
2.涓や釜閲嶈佺殑姒傚康錛
(1)瀹屽叏浜屽弶鏍戔斺斿彧鏈夋渶涓嬮潰鐨勪袱灞傜粨鐐瑰害灝忎簬2錛屽苟涓旀渶涓嬮潰涓灞傜殑緇撶偣閮介泦涓鍦ㄨュ眰鏈宸﹁竟鐨勮嫢騫蹭綅緗鐨勪簩鍙夋爲錛
(2)婊′簩鍙夋爲鈥斺旈櫎浜嗗彾緇撶偣澶栨瘡涓涓緇撶偣閮芥湁宸﹀彸瀛愬コ涓斿彾緇撶偣閮藉勫湪鏈搴曞眰鐨勪簩鍙夋爲,銆
3.浜屽弶鏍戠殑鎬ц川
(1) 鍦ㄤ簩鍙夋爲涓錛岀琲灞傜殑緇撶偣鎬繪暟涓嶈秴榪2^(i-1)錛
(2) 娣卞害涓篽鐨勪簩鍙夋爲鏈澶氭湁2^h-1涓緇撶偣(h>=1)錛屾渶灝戞湁h涓緇撶偣錛
(3) 瀵逛簬浠繪剰涓媯典簩鍙夋爲錛屽傛灉鍏跺彾緇撶偣鏁頒負N0錛岃屽害鏁頒負2鐨勭粨鐐規繪暟涓篘2錛
鍒橬0=N2+1錛
(4) 鍏鋒湁n涓緇撶偣鐨勫畬鍏ㄤ簩鍙夋爲鐨勬繁搴︿負int錛坙og2n錛+1
(5)鏈塏涓緇撶偣鐨勫畬鍏ㄤ簩鍙夋爲鍚勭粨鐐瑰傛灉鐢ㄩ『搴忔柟寮忓瓨鍌錛屽垯緇撶偣涔嬮棿鏈夊備笅鍏崇郴錛
鑻I涓虹粨鐐圭紪鍙峰垯 濡傛灉I<>1錛屽垯鍏剁埗緇撶偣鐨勭紪鍙蜂負I/2錛
濡傛灉2*I<=N錛屽垯鍏跺乏鍎垮瓙錛堝嵆宸﹀瓙鏍戠殑鏍圭粨鐐癸級鐨勭紪鍙蜂負2*I錛涜嫢2*I>N錛屽垯鏃犲乏鍎垮瓙錛
濡傛灉2*I+1<=N錛屽垯鍏跺彸鍎垮瓙鐨勭粨鐐圭紪鍙蜂負2*I+1錛涜嫢2*I+1>N錛屽垯鏃犲彸鍎垮瓙銆
4.浜屽弶鏍戠殑瀛樺偍緇撴瀯錛
(1錛夐『搴忓瓨鍌ㄦ柟寮
type node=record
data:datatype
l,r:integer;
end;
var tr:array[1..n] of node;
(2)閾捐〃瀛樺偍鏂瑰紡錛屽傦細
type btree=^node錛
node=record
data:datatye;
lchild,rchild:btree;
end;
5.鏅閫氭爲杞鎹㈡垚浜屽弶鏍戱細鍑℃槸鍏勫紵灝辯敤綰胯繛璧鋒潵錛岀劧鍚庡幓鎺夌埗浜插埌鍎垮瓙鐨勮繛綰匡紝鍙鐣欎笅鐖舵瘝鍒板叾絎涓涓瀛愬コ鐨勮繛綰褲
浜屽弶鏍戝緢璞′竴鏍鍊掓偓鐫鐨勬爲錛屼粠鏍戞牴鍒板ぇ鍒嗘灊銆佸皬鍒嗘灊銆佺洿鍒板彾瀛愭妸鏁版嵁鑱旂郴璧鋒潵錛岃繖縐嶆暟鎹緇撴瀯灝卞彨鍋氭爲緇撴瀯錛岀畝縐版爲銆傛爲涓姣忎釜鍒嗗弶鐐圭О涓虹粨鐐癸紝璧峰嬬粨鐐圭О涓烘爲鏍癸紝浠繪剰涓や釜緇撶偣闂寸殑榪炴帴鍏崇郴縐頒負鏍戞灊錛岀粨鐐逛笅闈涓嶅啀鏈夊垎鏋濈О涓烘爲鍙躲傜粨鐐圭殑鍓嶈秼緇撶偣縐頒負璇ョ粨鐐圭殑"鍙屼翰"錛岀粨鐐圭殑鍚庤秼緇撶偣縐頒負璇ョ粨鐐圭殑"瀛愬コ"鎴"瀛╁瓙"錛屽悓涓緇撶偣鐨"瀛愬コ"涔嬮棿浜掔О"鍏勫紵"銆
浜屽弶鏍戱細浜屽弶鏍戞槸涓縐嶅嶮鍒嗛噸瑕佺殑鏍戝瀷緇撴瀯銆傚畠鐨勭壒鐐規槸錛屾爲涓鐨勬瘡涓緇撶偣鏈澶氬彧鏈変袱媯靛瓙鏍戱紝鍗蟲爲涓浠諱綍緇撶偣鐨勫害鏁頒笉寰楀ぇ浜2銆備簩鍙夋爲鐨勫瓙鏍戞湁宸﹀彸涔嬪垎錛岃屼笖錛屽瓙鏍戠殑宸﹀彸嬈″簭鏄閲嶈佺殑錛屽嵆浣垮湪鍙鏈変竴媯靛瓙鏍戠殑鎯呭喌涓嬶紝涔熷簲鍒嗘竻鏄宸﹀瓙鏍戣繕鏄鍙沖瓙鏍戙傚畾涔夛細浜屽弶鏍戞槸緇撶偣鐨勬湁闄愰泦鍚堬紝榪欎釜闆嗗悎鎴栨槸絀虹殑錛屾垨鏄鐢變竴涓鏍圭粨鐐瑰拰涓ゆ5浜掍笉鐩鎬氦鐨勭О涔嬩負宸﹀瓙鏍戝拰鍙沖瓙鏍戠殑浜屽弶鏍戠粍鎴愩
錛堜笁錛夊畬鍏ㄤ簩鍙夋爲
瀵規弧浜屽弶鏍戱紝浠庣涓灞傜殑緇撶偣(鍗蟲牴)寮濮嬶紝鐢變笅鑰屼笂錛岀敱宸﹀強鍙籌紝鎸夐『搴忕粨鐐圭紪鍙鳳紝渚垮緱鍒版弧浜屽弶鏍戠殑涓涓欏哄簭琛ㄧず銆傛嵁姝ょ紪鍙鳳紝瀹屽叏浜屽弶鏍戝畾涔夊備笅錛氫竴媯靛叿鏈塶涓緇撶偣錛屾繁搴︿負K鐨勪簩鍙夋爲錛屽綋涓斾粎褰撴墍鏈夌粨鐐瑰瑰簲浜庢繁搴︿負K鐨勬弧浜屽弶鏍戜腑緙栧彿鐢1鑷硜鐨勯偅浜涚粨鐐規椂錛岃ヤ簩鍙夋爲渚挎槸瀹屽叏浜屽弶鏍戙傚浘4鏄涓媯靛畬鍏ㄤ簩鍙夋爲銆
涓夈佷簩鍙夋爲鐨勯亶鍘
閬嶅巻鏄瀵規爲鐨勪竴縐嶆渶鍩烘湰鐨勮繍綆楋紝鎵璋撻亶鍘嗕簩鍙夋爲錛屽氨鏄鎸変竴瀹氱殑瑙勫垯鍜岄『搴忚蛋閬嶄簩鍙夋爲鐨勬墍鏈夌粨鐐癸紝浣挎瘡涓涓緇撶偣閮借璁塊棶涓嬈★紝鑰屼笖鍙琚璁塊棶涓嬈°傜敱浜庝簩鍙夋爲鏄闈炵嚎鎬х粨鏋勶紝鍥犳わ紝鏍戠殑閬嶅巻瀹炶川涓婃槸灝嗕簩鍙夋爲鐨勫悇涓緇撶偣杞鎹㈡垚涓轟竴涓綰挎у簭鍒楁潵琛ㄧず銆
璁綥銆丏銆丷鍒嗗埆琛ㄧず閬嶅巻宸﹀瓙鏍戙佽塊棶鏍圭粨鐐瑰拰閬嶅巻鍙沖瓙鏍戱紝 鍒欏逛竴媯典簩鍙夋爲鐨勯亶鍘嗘湁涓夌嶆儏鍐碉細DLR錛堢О涓哄厛鏍規″簭閬嶅巻錛夛紝LDR錛堢О涓轟腑鏍規″簭閬嶅巻錛夛紝LRD 錛堢О涓哄悗鏍規″簭閬嶅巻錛夈
(1)鍏堝簭閬嶅巻
璁塊棶鏍癸紱鎸夊厛搴忛亶鍘嗗乏瀛愭爲錛涙寜鍏堝簭閬嶅巻鍙沖瓙鏍
(2)涓搴忛亶鍘
鎸変腑搴忛亶鍘嗗乏瀛愭爲錛涜塊棶鏍癸紱鎸変腑搴忛亶鍘嗗彸瀛愭爲
(3)鍚庡簭閬嶅巻
鎸夊悗搴忛亶鍘嗗乏瀛愭爲錛涙寜鍚庡簭閬嶅巻鍙沖瓙鏍戱紱璁塊棶鏍
❺ C語言中的樹和圖有什麼用
在程序設計當中,樹和圖是兩種常見的數據結構,在計算機技術應用十分廣泛,他們也是兩種思考問題的方式,常用於結局實際問題。樹最直觀的用途就是如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程序如下時,可用樹表示源源程序如下的語法結構。在資料庫系統中,樹型結構也是信息的重要組織形式之一,一切具有層次關系的問題都可用樹來描述。數據結構的圖就是實際情況的抽象,即邏輯模型,然後通過計算機編程來解決問題。比如一個很復雜的地圖,有很多城市,有很多路,如何找出最短路徑呢?當然是用計算機來算了,就得用圖來表示等等。
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後件關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:
a.集合
數據結構中的元素之間除了「同屬一個集合」 的相互關系外,別無其他關系;
b.線性結構
數據結構中的元素存在一對一的相互關系;
c.樹形結構
數據結構中的元素存在一對多的相互關系;
d.圖形結構
數據結構中的元素存在多對多的相互關系。
❻ c璇璦錛屼簩鍙夋爲奼傝В鍀
鍏堣冭檻搴︿負2鐨勭粨鐐癸紝絎涓灞1涓錛岀浜屽眰2涓錛岀涓夊眰4涓錛岀鍥涘眰8涓錛岀浜斿眰8涓錛屽叡23涓銆
鐒跺悗絎5灞傝繕鏈8涓絀轟綅錛屽厛鍋囪句負鍙跺瓙鑺傜偣錛屽嵆搴︿負0銆傜浜斿眰婊★紝鐩鍓嶆誨叡31涓緇撶偣銆
鐒跺悗絎浜斿眰鐨8涓搴︿負2鐨勭粨鐐瑰彲浠ュ紩鐢沖嚭16涓鍙跺瓙緇撶偣錛屾誨叡47涓錛屼互婊¤凍棰樻剰錛屽亣璁炬垚絝嬨
鏁6灞傘
褰撶劧姣旇緝綆鍗曠殑棰樼敾鍥句細寰堝ソ瑙c