中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c++ qsort如何處理樹結構排序

c++
小樊
81
2024-11-25 05:59:35
欄目: 編程語言

qsort 是一個通用的排序函數,它接受一個數組、數組的大小和一個比較函數作為參數

首先,我們需要定義一個比較函數,該函數接受兩個指向樹節點的指針作為參數。這個比較函數應該返回一個整數,表示兩個節點的大小關系。通常,我們可以使用以下方法來比較兩個節點:

  1. 如果兩個節點的值相等,則它們的順序無關緊要。
  2. 如果第一個節點的值小于第二個節點的值,則第一個節點應該在第二個節點之前。
  3. 如果第一個節點的值大于第二個節點的值,則第一個節點應該在第二個節點之后。

下面是一個簡單的示例,展示了如何使用 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 對其進行中序遍歷。

0
乐安县| 原阳县| 沙湾县| 武乡县| 沁源县| 江都市| 都江堰市| 桂平市| 内丘县| 增城市| 万全县| 惠东县| 施秉县| 汽车| 河间市| 繁昌县| 炎陵县| 枞阳县| 麻江县| 丹棱县| 双峰县| 偃师市| 达拉特旗| 邹平县| 四川省| 遂平县| 临澧县| 奉贤区| 道真| 靖西县| 绥滨县| 河北省| 泽普县| 新安县| 行唐县| 武宁县| 江川县| 农安县| 什邡市| 怀来县| 大名县|