鍊錶測試資料生成
因為在面試的過程中,免不了會遇到二叉樹相關的題目,畢竟二叉樹的先序、中序、後序遍歷**手撕是常有的事,那麼 這個時候肯定要求自己有一組好的測試用例,但如果乙個乙個的設定節點,一是效率低。二會給面試官之中生疏的感覺。
結合堆排序中,以根節點為第乙個節點,那麼二叉樹中的節點關係:
1.如果第i個節點的左子節點存在,那麼這個節點的左子節點為第2*i個節點;
2.如果第i個節點的右子節點存在,那麼右子節點為第2*i+1個節點;
這個關係是在完全二叉樹的情況成立,所以為了保持這個性質,如果有的節點不存在,也需要空出位置,作為乙個佔位。
1.定義節點的結構
2.產生乙個固定長度的陣列alldata,長度為數的節點數+1,為了方便生成,我們以一顆完全二叉樹來作為生成資料
3.從陣列alldata[[1]]開始,對每乙個節點進行初始化,alldata的第0個元素僅僅是用來佔位
以以下二叉樹為例
;//第一位用來佔位
lnode allnode[ln_size +1]
;for
(int i =
1; i <= ln_size; i++
)// 二叉樹的頭結點為allnode[1]
lnode *head=
&allnode[1]
;//先序遍歷
stack
> st;
st.push
(head)
;while
(!st.
empty()
) cout << endl;
return0;
}對於鍊錶,可以採用頭插法或者尾插法。與之相比,遞迴的方法似乎更加的便捷。
使用乙個陣列先儲存所有節點,對函式傳入生成鍊錶的起點和終點
如果起點大於終點,那麼返回null
如果起點小於或者等於終點,則以起點處的資料生成乙個節點,再把節點next指標指向後面資料的遞迴函式返回值。
下面以鍊錶1 2 3 4 5為例
#include
#include
using
namespace std;
struct lnode
;lnode *
buildlist
(vector<
int>
& vc,
int start,
int end)
intmain()
;auto head =
buildlist
(vc,0,
4);auto pos = head;
while
(pos !=
nullptr
) cout << endl;
return0;
}
鍊錶和二叉樹
1.鍊錶 鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。相比於線性表順序結構,鍊錶比較方便插入和刪除操作。a.單向鍊錶 單向鍊錶的每乙個結點由儲存資料元素的資料域和指向下乙個結點的指標域組成。b.雙向鍊錶 雙向鍊錶是單鏈表的改進。雙向鍊錶中,結...
鍊錶和二叉樹
鍊錶是離散儲存性結構 常用鍊錶有3類 單鏈表 雙向鍊錶 迴圈鍊錶 陣列是一種連續儲存線性結構,元素型別相同,大小相等。鍊錶和陣列各自的優缺點 鍊錶優點 空間沒有限制 插入刪除元素很快 缺點 訪問速度慢 陣列優點 訪問速度快 缺點 必須事先知道陣列的長度 插入刪除元素很慢 空間有限制 單鏈表由各個記憶...
二叉樹 二叉鍊錶
include using namespace std typedef char elemtype int n 0 typedef struct binode binode class bitree bitree binode getroot void preorder binode root 前序...