qsort
是一個通用的排序函數,它接受一個數組、數組的大小和一個比較函數作為參數
首先,我們需要定義一個比較函數,該函數接受兩個指向樹節點的指針作為參數。這個比較函數應該返回一個整數,表示兩個節點的大小關系。通常,我們可以使用以下方法來比較兩個節點:
下面是一個簡單的示例,展示了如何使用 qsort
對二叉搜索樹進行排序:
#include <iostream>
#include <algorithm>
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 比較函數,用于 qsort
int compare(const void *a, const void *b) {
TreeNode *nodeA = *reinterpret_cast<TreeNode **>(a);
TreeNode *nodeB = *reinterpret_cast<TreeNode **>(b);
if (nodeA->val == nodeB->val) {
return 0;
} else if (nodeA->val < nodeB->val) {
return -1;
} else {
return 1;
}
}
// 中序遍歷二叉樹
void inorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
int main() {
// 創建一個簡單的二叉搜索樹
TreeNode *root = new TreeNode(5);
root->left = new TreeNode(3);
root->right = new TreeNode(7);
root->left->left = new TreeNode(2);
root->left->right = new TreeNode(4);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(8);
// 使用 qsort 對二叉搜索樹進行中序遍歷
std::cout << "Inorder traversal of the sorted tree: ";
qsort((void *)root, sizeof(TreeNode *), compare);
inorderTraversal(root);
std::cout << std::endl;
return 0;
}
在這個示例中,我們首先定義了一個 TreeNode
結構體,用于表示二叉樹的節點。然后,我們定義了一個比較函數 compare
,用于 qsort
對樹節點進行排序。接下來,我們實現了一個中序遍歷函數 inorderTraversal
,用于打印排序后的樹節點。最后,在 main
函數中,我們創建了一個簡單的二叉搜索樹,并使用 qsort
對其進行中序遍歷。