排序二叉樹or搜尋二叉樹or查詢二叉樹

2021-07-31 21:46:20 字數 1658 閱讀 3823

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。

排序二叉樹定義:

(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

從定義中我們可以知道:左《根《右;因此使用中序遍歷排序二叉樹一定是乙個遞增序列。

節點定義:

struct node;
node arr[105]=;//定義乙個大小為105的陣列。可以裝105個元素,
int root=1;//根節點對應的陣列下標
建樹:

排序二叉樹的建立並不難,因為建樹的過程就是將值乙個乙個插入到樹中去的過程。例如這裡使用隨機函式生成100個隨機值,然後依次插入到排序二叉樹中就完成了建樹。

srand(unsigned(time(null)));

int x;

for(int i=1;i<101;i++)

插入元素:

向二叉樹中插入元素需要通過將待插入的值和某個節點對比,決定是插入到這個節點的左邊還是右邊。例如要想下面的二叉樹中插入21,首先21和3相比,比3大則一定在3的右邊,然後21和8比,又大;則到8的右邊,而8的右邊沒有,那麼將21插入作為8的右兒子

實現**:

void insert(int index,int i)

if(arr[index].left!=0&&x插入

insert(arr[index].left,i);

else if(arr[index].right!=0&&x>y)//如果x插入

insert(arr[index].right,i);

else if(arr[index].left==0&&x//如果x插入到y的

左邊 arr[index].left=i;

arr[index].freq=1;

arr[i].father=index;

return;

} else if(arr[index].right==0&&x>y)

}

查詢元素:

查詢元素很容易,只有兩種結果:找到和找不到。找到就是其中某個值和要查詢的值相等,找不到就是把樹都走完了,但是還是沒有相等的。查詢和插入很相似,同樣是通過比較決定到左還是右邊去查詢。

比如:查詢7

1.和12相比小------左

2.和6相比大--------右

3.和8相比小--------左

4.和7相比等--------找到

若是在第3步,8不存在左子樹,那麼返回找不到

實現**:

int find(int r,int da)

arr[temp].father=0;

}else 

}

執行截圖:使用中序遍歷後是乙個上公升序列

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...

二叉樹,排序二叉樹

說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...