這週我學習了樹的有關知識,將學到的一些東西寫下來。
first 樹的定義
1、有且只有乙個稱為根的節點;
2、有若干個互不相交的子樹,這些子樹本身也是一顆樹。
second 專業術語
樹的深度:從根節點到最低層,節點的層數 ,稱之為樹的深度。 根節點是第一層;
結點的層次:根節點為第一層,根節點的子節點為第2層,以此類推 ;
葉子節點:沒有子節點的節點;
非終端節點:實際就是非葉子節點;
結點度: 子節點的個數稱為度樹的度。
third 樹的分類
一般樹:任意乙個節點的子節點的個數不受限制;
二叉樹:任意乙個節點的子節點最多2個,且子節點的位置不可更改;
滿二叉樹:在不增加層數的情況下,不能在增加節點的情況就是滿二叉樹;
完全二叉樹:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。
介紹完樹的基礎知識後,我參考網上大神的**,自己試了試二叉樹的c語言建立與列印,**如下:
二叉樹的建立、插入與列印
#include
#include
//二叉樹的結點
typedef
struct tree
treenode,
*tree;
//二叉樹結點的插入
tree insert_node
(tree root,
int node)
if(parentnode->data > node)
parentnode->left=newnode;
else
parentnode->right=newnode;
}return root;
}tree create_btree
(int
*data,
int len)
void
print_btree
(tree root)
intmain()
root=
create_btree
(nodelist,ans)
;//建立二叉樹
print_btree
(root)
;//遍歷列印二叉樹
return0;
}
通過樹的學習,我對鍊錶的認識又深了一層。並且想到乙個問題:單向鍊錶中的next與二叉樹裡的左右子樹,本質上講是一樣的。我又想到雙向煉表裡的prev和next,那麼鍊錶是如何識別前後左右的呢?經過思考,我認為,可以將頭結點或是父結點認為是乙個質點(或是乙個皮球),你可以在這個質點上進行連線,將你的新結點與之連線,而left、right、prev或是next只不過是連線用到的線,叫什麼名字無所謂,這樣書寫只是更有助於理解。 C語言學習
c語言學習 2013 3 26 1 編寫strcat s,t 函式,功能 將t指向的字串複製到s指向的字串的尾部。程式設計思路 1 通過while迴圈找到字串s的結束符。2 從找到的結束符開始將t複製到s,同時移動二者的指標。2 編寫函式strend s,t 如果字串t出現在字串s的尾部,該函式返回...
c語言學習
今天總結一些c 語言方面的知識 變數的概念 其值在作用域內可以改變的量稱為變數。乙個變數應該有乙個名字,並在記憶體中佔據一定儲存空間。區域性變數和全域性變數 區域性變數是在函式內作定義說明的,其作用域僅限函式內,離開該函式再使用這種變數是非法的。全域性變數也稱為外部變數,是在函式外部定義的變數,它不...
c語言學習
計算機工作基本原理 現代計算機可分為幾個部件 cpu 處理單元 擔負著絕大部分的計算工作。ram 隨機訪問儲存器 作為乙個工作區來儲存程式和檔案。硬碟 永久儲存器 即使在計算機關機時也能記下程式和檔案。以及各種外圍裝置 如鍵盤,滑鼠和監視器 用來提供人與計算器之間的通訊。cpu工作過程 從記憶體中獲...