排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。
排序二叉樹定義:
(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 如上,根據先序遍...