今天剛剛想起二叉樹的時候居然忘記怎麼去操作了 , 看我的笨腦袋。還是簡單的記錄下來,以防之後還會忘記吧,
二叉樹 簡而言之 就是樹上面一般有兩個樹杈,人們親切的叫他們為父節點的兩個孩子,當然是有順序的啦,孩子也有長幼之分嘛, 在他們的世界裡,左邊的孩子要年長些。 我們經常稱之為左孩子和又孩子。
呵呵 , 原來程式也是有輩分之分的哦。閒話不多說,
先來看看樹的的型別:
typedef struct bitree_node
bitree_t;
以上就是二叉樹的型別,那麼怎麼建立二叉樹呢?
這一點是與建立其它的資料型別不同的地方,建立二叉樹的時候,我們需要乙個引數,來說明從什麼地方開始往下面建立樹節點, 一般的話都會在主函式中傳1即可,用n來代表,函式實現如下:
bitree_t * create_binarry_tree(int n)
if( 2 * n +1 <= n)
return root; //返回樹的位址 }
以上就是建立樹的過程,建立樹有很多的方式,這只是其中的一種,建立的方法類似於樹的先序遍歷,那麼樹的遍歷有幾種呢?
咳咳 。 。。。 。 。
當然就是傳說中的遍歷三**啦 (其實還有哦)
1 先序遍歷
2 中序遍歷
3 後序遍歷
他們三個可謂你中有我我中有你哈
光說沒什麼用 , 先來看看具體是怎麼實現的:
void pre_tree(bitree_t *root)
//接下來就是訪問根節點呢 什麼叫訪問呢? 或許你會說 這你都不知到? 嘿嘿 不滿大家 想當初俺剛剛接觸的時候真的就是不知道 怎麼訪問的方法 其實答案是這樣子滴
printf("(%d : %c)",root->n,root->data) ; //是的 你沒有看錯 就是輸出樹節點的資料 界就是所謂的訪問咯
//訪問過根節點後 按照先序遍歷的 根 左 右 的訪問順序 就該訪問左孩子啦
pre_tree(root->lchild); // 對的 就是這樣子寫的 利用了遞迴的思想 好好品味哦
pre_tree(root->rchild); //訪問右子樹
return ; //結束遍歷的過程 }
遍歷就是這麼的簡單,有時候寫**的時候 記得就是千萬不要多想 有時候多想不是一件有效的事情 把問題簡單化 有時候才是最好的辦法。
那麼中序遍歷和後序遍歷呢? 其實如果你看懂了先序遍歷的話 只需要調換一下他們的位置就行了 。
以上的各種方法 都是以遞迴的思想寫的, 有沒有非遞迴的方式遍歷呢?
答案是肯定的 那就是層次遍歷。 利用鏈式佇列還可以一層一層的遍歷,這在以後的記錄中會慢慢的追加進來。好了手指好累啊 玩計算機的 原來真的不是什麼腦力勞動 體力勞動才符合啊
哈哈 o(∩_∩)o哈哈~
二叉樹的建立與遍歷 二叉樹遍歷模板)
初學二叉樹,感覺之前鍊錶掌握不熟練導致接受有點難,現在做一些總結。本題其實就是根據給出的前序遍歷 包括空子樹 寫出相應的前序 中序和後序遍歷。廢話不多說,先看看題目 description 下面給出了教材中演算法6.4所示的演算法。status createbitree bitree t retur...
二叉樹建立與遍歷
二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱為 左子樹 和 右子樹 二叉樹的每個節點最多只能右兩棵子樹,子樹有左右之分,次序不能顛倒。除了葉結點外每乙個結點都有左右子葉且葉子結點都處在最底層的二叉樹。假設二叉樹的高度為k,除第k層外,其他各層的節點數都達到最大個數。也就是第一層到第k 1層為...
二叉樹建立與遍歷
節點定義 class binnode binnode char data2 data data2 binnode char data2,binnode parent2 data data2 void insertasleft char data void insertasright char dat...