二叉排序樹的基本思想是將序列中的數讀入乙個二叉樹,在讀入時遵循一定的規則:比如,如果二叉樹的乙個節點有左子節點,那麼左子節點一定比父節點的值小;如果乙個節點有右子節點,那麼右子節點一定比父節點的值大。在二叉排序樹製造完成後,通過採用中序遍歷的方法讀取二叉樹節點的值到序列中,就可以得到乙個公升序序列。
讀取二叉排序樹的操作為:
1,如果節點非空:
1.1,如果節點的左子節點非空,將左子節點設為操作節點,返回1;
1.2,如果節點左子節點為空,取節點資料到序列中;
2,如果節點為空,輸出序列。1.2.1,如果節點右子節點非空,並且節點的父節點非空,令當前節點的右子節點為父節點的子節點;如果父節點為空,令右子節點為操作節點;
1.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 ...