排序演算法 二叉排序樹

2021-07-28 14:36:14 字數 1383 閱讀 6475

二叉排序樹的基本思想是將序列中的數讀入乙個二叉樹,在讀入時遵循一定的規則:比如,如果二叉樹的乙個節點有左子節點,那麼左子節點一定比父節點的值小;如果乙個節點有右子節點,那麼右子節點一定比父節點的值大。在二叉排序樹製造完成後,通過採用中序遍歷的方法讀取二叉樹節點的值到序列中,就可以得到乙個公升序序列。

讀取二叉排序樹的操作為:

1,如果節點非空:

1.1,如果節點的左子節點非空,將左子節點設為操作節點,返回1;

1.2,如果節點左子節點為空,取節點資料到序列中;

1.2.1,如果節點右子節點非空,並且節點的父節點非空,令當前節點的右子節點為父節點的子節點;如果父節點為空,令右子節點為操作節點;

1.2.2,如果右子節點為空,並且父節點非空,令父節點的左子節點為空,令父節點為操作節點,釋放當前節點;,

2,如果節點為空,輸出序列。

c++**實現

#include #include using namespace std;

templatevoid binarytreesort(vector&vec);

int main()

; vectorvec(&att[0], &att[sizeof(att) / sizeof(int)]);

binarytreesort(vec);

return 0;

}templatevoid binarytreesort(vector&vec)

sortnode;

sortnode *headnode = new sortnode();

headnode->data = vec[0];

headnode->father = null;

headnode->left = null;

headnode->right = null;

for (int vidx = 1; vidx < vsize; vidx++)

else

}else

else

}} }

sortnode *tmpnode = headnode;

int vidx = 0;

while (null != tmpnode)

tmpnode->right->father = tmpnode->father;

sortnode *childnode = tmpnode->right;

delete tmpnode;

tmpnode = childnode;

}else

}else

}vidx = 0;

for (; vidx < vsize; vidx++)

return;

}

二叉排序樹

在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...

二叉排序樹

name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...

二叉排序樹

include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...