91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
安多县| 乌鲁木齐市| 辉南县| 延津县| 新泰市| 兴国县| 海盐县| 翁牛特旗| 克山县| 东光县| 称多县| 上饶县| 保德县| 黔西县| 界首市| 游戏| 中卫市| 宜兰县| 潜山县| 吴堡县| 穆棱市| 黄浦区| 林西县| 崇明县| 阳高县| 文安县| 彭水| 昭苏县| 敖汉旗| 安顺市| 乐都县| 华阴市| 湖北省| 新巴尔虎右旗| 临泉县| 阿拉善右旗| 湄潭县| 阜新市| 宾阳县| 嘉峪关市| 滨州市|